Я использую C# NetworkStream
для чтения/записи на IP-адрес (а не на DNS-адрес).
Моя программа заменяет очень старую ассемблерную программу, которая была на мэйнфрейме. Теперь это в Windows.NetworkStream Read Extremely Slow
Я пишу/читаю менее 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