我正在使用C#NetworkStream
来读取/写入IP地址(而不是DNS地址)。
我的程序正在取代大型机上的一个非常旧的汇编语言程序。现在它在Windows上。
我正在写/读取少于200
个字节。字符串以LineFeed
字符结尾,因此我在StreamReader.Readline()
之后使用Stream.Write()
来阅读回复。在IBM上,写入/读取周期为300ms
。
现在大约在每次读取或读取2次后,读取需要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();
答案 0 :(得分:0)
您的连接保持打开状态,因为您的代码永远不会释放您的IDisposable
资源。
using
结构,您的代码应该运行得更快。 ReadToEnd
回复你的信息,并在释放资源后自己检查。 所以你的代码看起来像这样:
string response = null;
using(var tcpc = new TcpClient())
{
tcpc.NoDelay = true;
tcpc.ExclusiveAddressUse = false;
tcpc.Connect("172.18.10.100", 4004);
using (var stream = tcpc.GetStream())
using (var sr = new StreamReader(stream, Encoding.ASCII))
{
sr.Peek();
var Message = "IX3543543" + '\r';
stream.Write(Encoding.ASCII.GetBytes(Message), 0, Message.Length);
response = sr.ReadToEnd();
}
}
// examine message here
var lines = response.Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);