我正在使用C#NetworkStream
来读取/写入IP地址(而不是DNS地址)。
我的程序正在取代大型机上的一个非常古老的汇编语言程序。现在它在Windows上。NetworkStream读取速度极慢
我正在写/读小于200
字节。字符串以LineFeed
字符结尾,所以我使用StreamReader.Readline()
来读取响应,在我的Stream.Write()
之后。在IBM上,一个写/读周期花费了300ms
。
现在约每读完2或3次读取,读取时间为15
秒。当我读取发件人的日志时,它发送的数据不到一秒钟。由于某种原因,我得到这些15
第二次延期。
我对发生的事情毫无头绪。
p.s. 我注意到一个奇怪的事情,如果我设置流读取超时时间为4秒,它会超过4秒。如果我将超时设置为10秒或没有超时,则15秒后超时。
TcpClient tcpc = null;
NetworkStream stream = null;
StreamReader sr = null;
tcpc = new TcpClient();
tcpc.NoDelay = true;
tcpc.ExclusiveAddressUse = false;
tcpc.Connect("172.18.10.100", 4004);
stream = tcpc.GetStream();
sr = new StreamReader(stream, Encoding.ASCII);
sr.Peek();
string Message = null;
Message = "IX3543543" + '\r';
stream.Write(Encoding.ASCII.GetBytes(Message), 0, Message.Length);
string readmsg = null;
for (int i = 0; i < 4; i++)
readmsg = sr.ReadLine();
你尝试用较小的尺寸来读取数据吗?说16个字节?可能是你的主机保持连接,并因此导致延迟。 – VMAtm
我在写一个终端服务器,它后面有一个服务器。我的程序正在取代大型机程序。我建立连接并且永不关闭它或流。 Netstat -n -t 2显示连接保持打开状态。连接永远不会进入wait_state。我也在想它某种奇怪的Windows事物或反病毒程序或其他东西。但是,我在一台服务器和一台笔记本电脑上运行我的程序,结果相同。所以我很茫然。 – user965445
你能提供你的代码吗? – VMAtm