如何改进此 TCP 代码
本文关键字:代码 TCP 何改进 | 更新日期: 2023-09-27 17:58:02
有时即使服务器recByte
也无法收到响应确实回复了,因为服务器不够快。如果发生这种情况,我使用
catch (System.IO.IOException ioe)
以防止错误,但是是否有可能的替代方法可以让客户端等待更长的时间?我确实试过
clientStream.ReadTimeout = 20000;
但它没有用
TcpClient Client = new TcpClient();
Client.Connect(ipaddress, portnum);
NetworkStream clientStream = Client.GetStream();
byte[] buffer = themessagetosent;
clientStream.Write(buffer, 0, buffer.Length);
byte[] recByte = theresponse;
clientStream.Read(recByte, 0, recByte.Length);
您需要增加 tcpClient 的超时,而不是流的超时。此外,可能希望增加 send
和receive
的超时,并且可能不仅仅是 2 秒。
var client = new TcpClient { SendTimeout = 10000, ReceiveTimeout = 10000 };
我相信如果你在IOException中查看内部异常,你会看到里面的SocketException。查看错误代码以找出到底发生了什么。
如果服务器发送的字节非常少,则可以考虑使用套接字。NoDelay = 在服务器端(如果需要,也可以在客户端(使用 false,这会禁用 Nagle 算法并强制 tcp/ip 堆栈立即发送数据,而无需寻找要收集的进一步数据。
CanRead 和 DataAvailable 在有专用线程来处理套接字和数据读取时非常有用。
在 MSDN 上查看此示例中 CanRead
和 DataAvailable
的用法。