如何改进此 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);

如何改进此 TCP 代码

您需要增加 tcpClient 的超时,而不是流的超时。此外,可能希望增加 sendreceive的超时,并且可能不仅仅是 2 秒。

var client = new TcpClient { SendTimeout = 10000, ReceiveTimeout = 10000 };

我相信如果你在IOException中查看内部异常,你会看到里面的SocketException。查看错误代码以找出到底发生了什么。

如果服务器发送的字节非常少,则可以考虑使用套接字。NoDelay = 在服务器端(如果需要,也可以在客户端(使用 false,这会禁用 Nagle 算法并强制 tcp/ip 堆栈立即发送数据,而无需寻找要收集的进一步数据。

CanRead 和 DataAvailable 在有专用线程来处理套接字和数据读取时非常有用。

在 MSDN 上查看此示例中 CanReadDataAvailable 的用法。