如何改善这个TCP代码?

问题描述

| 有时即使服务器仍未将“ 0”接收到响应 由于服务器速度不够快而未回复。如果我使用哪一个
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,buffer.Length);

byte[] recByte = theresponse;
clientStream.Read(recByte,recByte.Length);
    

解决方法

        您需要增加tcpClient的超时,而不是流的超时。另外,可能想将
send
receive
的超时都增加,并且可能要超过2秒。
var client = new TcpClient { SendTimeout = 10000,ReceiveTimeout = 10000 };
我相信,如果您在IOException中查看内部异常,则会在其中看到SocketException。查看错误代码以找出实际发生的情况。     ,        如果服务器发送的字节数很少,则可以考虑在服务器端使用socket.NoDelay = false(如果需要,也可以在客户端),这将禁用Nagle算法并强制tcp / ip堆栈立即发送数据而无需查找进一步收集数据。 当您有专用的线程来处理套接字和读取的数据时,CanRead和DataAvailable非常有用。     ,        在MSDN上的示例中,检查ѭ7和ѭ8的用法。