2012-12-07 5 views
1

는 내가 모든 데이터를 저장하는 곳소켓 수신과 다른 수신 사이에 Thread.Sleep을 사용해야합니까?

int bytesRead = 0; 
int offset = 0; 

do 
{ 
    var buffer = new byte[N - offset]; 
    bytesRead = socket.Receive(buffer, 0, buffer.Length, SocketFlags.None); 
    Buffer.BlockCopy(buffer, 0, packet.Buffer, offset, bytesRead); 
    offset += bytesRead; 

    // Thread.Sleep(How much have I to sleep?); 
} 
while (offset < N); 

packet.Buffer이 소켓을 사용하여 데이터의 N 바이트를받을 내가 가진 느릅 나무에 루프가 있습니다.

소켓 수신 사이에 Thread.Sleep을 사용해야합니까? 충분한 데이터가 도착할 때까지 기다려야합니까? 그렇다면 몇 밀리 초입니까?

+2

낮은 추상화 수준에서 데이터가 버퍼링되므로 너무 적은 양의 데이터를 한꺼번에 가져 오는 것을 방지 할 수 있습니다. – Servy

답변

4

잠자기 할 필요가 없습니다. 데이터를 사용할 수있을 때까지 socket.Receive 통화가 차단됩니다. relevant MSDN page

에서

... 데이터가 읽을 수없는 경우, 데이터를 사용할 수있을 때까지 을 차단 방법을 수신 ...

1

을 확실히하지. 말 그대로 시간 낭비입니다. 수신은 데이터 또는 EOS가 도착할 때까지 차단되며 정확한 시간 동안 차단됩니다. 수면을 추가하는 것은 의미가 없습니다.

관련 문제