1
때때로 이상한 문제가 발생합니다. 동기 소켓을 연결하여 데이터를 정상적으로 전송합니다.소켓 동기 수신
do
{
try
{
// blocking
int bytesRead = sender.Receive(bytesReceived);
// process the received bytes
}
catch (SocketException soex)
{
throw new Exception(String.Format("Socket exception..." +Environment.NewLine+"[Code: {0}] {1}",soex.ErrorCode,soex.Message));
}
}
while (sender.Poll(1500, SelectMode.SelectRead) && sender.Available > 0);
내가 와이어에 와서 시간을 얻기 위해 패킷에 대한 응답을 기다리는 시간으로 설문 조사를 넣을 이유가 그래서 나는 영원히이 차단되기 때문에 수신에 체류하지 않을
그리고 Available과 함께 실제 데이터가 더 이상 없을 때 휴식을 취할 수 있습니다.
내가 얻는 문제는 client.Available> 0이 거짓 (바이트가 있음) 일 때 false를 반환한다는 것입니다. 잠시 후 Debug.WriteLine을 삽입하여 출력하는 방법 사용 가능한 많은 바이트를 사용할 수 있으며 숫자를 얻습니다.
아이디어가 있으십니까? 나는 당혹 스럽다.
단순히 'ReceiveAsync'를 사용하지 않는 이유는 무엇입니까? –
false를 반환하는 표현식은 무엇입니까? '보낸 사람 .Poll (1500, SelectMode.SelectRead)'또는'sender.Available> 0'? –
아마 당신은 디버거에 있지만 표현식이 실행되었을 때 바이트가 있습니까? –