【发布时间】:2015-04-28 21:40:52
【问题描述】:
我正在使用 C# NetworkStream 读取/写入 IP 地址(不是 DNS 地址)。
我的程序正在替换大型机上的一个非常旧的汇编语言程序。现在它在 Windows 上。
我正在写/读少于200 字节。字符串以LineFeed 字符结尾,所以我在Stream.Write() 之后使用StreamReader.Readline() 来读取响应。在 IBM 上,写入/读取周期花费了 300ms。
现在大约在每 2 次或 3 次读取之后,读取需要 15 秒。当我阅读发件人的日志时,它会在不到一秒的时间内发送数据。出于某种原因,我得到了这些15 秒延迟。
我不知道发生了什么。
附言 如果我将流读取超时设置为 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 个字节?可能是您的大型机保持连接,因此它变得延迟。
-
我正在写一个终端服务器,它后面有一个服务器。我的程序正在替换大型机程序。我建立连接并且从不关闭它或流。 Netstat -n -t 2 显示连接保持打开状态。连接永远不会进入 wait_state。我还认为它是某种奇怪的 Windows 东西或防病毒程序或其他东西。但是,我在服务器和笔记本电脑上运行我的程序,结果相同。所以我很茫然。
-
你能提供你的代码吗?
-
TcpClient tcpc = null;网络流流 = null; StreamReader sr = null; tcpc = 新的 TcpClient(); tcpc.NoDelay = true; tcpc.ExclusiveAddressUse = false; tcpc.Connect("172.18.10.100", 4004);流 = tcpc.GetStream(); sr = new StreamReader(stream, Encoding.ASCII); sr.Peek();字符串消息=空;消息 = "IX3543543" + '\r'; stream.Write(Encoding.ASCII.GetBytes(Message), 0, Message.Length);字符串 readmsg = null; for (int i = 0; i
-
我没有使用 TcpClient 或 NetworkStream 的经验,但有相当多的直接使用 Socket 的经验。您的应用程序看起来很简单,可以使用 Socket.Receive() 和 Socket.Send() 作为阻塞调用。不能保证这会解决你的问题......
标签: c# .net sockets networkstream