아래 코드는 TCP 클라이언트 스트림에서 읽는 모든 것을 읽습니다. 다음 반복에서는 Read() (데이터 대기 중일 때) . 읽지 않을 것을 어떻게 보장 할 수 있습니까? 시간 제한을 낮게 설정해야하며 장애가 발생하면 예외에 응답해야합니까? 아니면 더 좋은 방법이 있을까요?streamreader가 데이터 대기를 기다리지 않도록하십시오.
TcpClient tcpclnt = new TcpClient();
tcpclnt.Connect(ip, port);
Stream stm = tcpclnt.GetStream();
stm.Write(cmdBuffer, 0, cmdBuffer.Length);
byte[] response = new Byte[2048];
MemoryStream ms = new MemoryStream();
byte[] buffer = new Byte[2048];
int length;
while ((length = stm.Read(buffer, 0, buffer.Length)) > 0)
ms.Write(buffer, 0, length);
byte[] response = ms.ToArray();
tcpclnt.Close();
tnx 4 답장. 서버에서 아무것도 변경할 수 없습니다. 또한, 만약 내가 tcp 클라이언트 타임 아웃을 1 초로 설정하면 타임 아웃되고 예외가 발생합니다. 그래서, 아니오, 나는 빈 바이트를 얻지 못하고있다. – flamey
중단 점이나 카운터를 추가하여 시도 했습니까? 매달려 있는지 또는 루프에 걸렸는지 확인하려는 시도가 있습니까? –
루프에 걸리지 않았습니다. 그것의 붙어있어 읽기(). 두 개의 연속적인 stm.Read (buffer, 0, buffer.Length) 라인으로 루프를 대체하면 처음으로 20 바이트를 받고 다음 라인으로 넘어갑니다. 또는 버퍼 크기를 10로 설정하면 두 번 반복하여 20 바이트를 얻은 다음 다음, 세 번째 반복에 앉을 것입니다. – flamey