C # — TcpClient не отправляет сообщение

У меня проблема с отправкой данных с C # TcpClient.

Вот как выглядит мой код:

        public Connection()
{
try
{
client = new TcpClient("127.0.0.1", 7171);
writer = new StreamWriter(client.GetStream());
client.Client.NoDelay = true;
client.NoDelay = true;

sendFirstPacket();
while (true)
{
if (client.GetStream().DataAvailable)
Logger.log(Log_Type.ERROR, "mam cos");

}
Logger.log(Log_Type.INFO, "Spoko luz");
}
catch (Exception ex)
{
Logger.log(Log_Type.ERROR, ex.Message);
}
finally
{
//client.Close();
}
}

void onSendDone()
{
}

void sendFirstPacket()
{
writer.Write((byte)10);
writer.Write((ushort)2);
writer.Write((ushort)854);
UInt32[] k = new UInt32[4];

k[0] = (12444 << 16) | 12444;
k[1] = (12444 << 16) | 12444;
k[2] = (12444 << 16) | 12444;
k[3] = (12444 << 16) | 12444;

writer.Write((byte)0); // first byte have to be 0
writer.Write((UInt32)k[0]);
writer.Write((UInt32)k[1]);
writer.Write((UInt32)k[2]);
writer.Write((UInt32)k[3]);
writer.Flush();
//client.GetStream().Write(
}

К сожалению, через несколько секунд я получил «операция ввода-вывода была прервана из-за выхода из потока или запроса приложения» на моем сервере (написано на C ++).
Но если я изменил этот код и поместил sendFirstPakcet () в цикл while, он отправит пакет правильно (я считаю более 700 циклов), а затем throw throw: Невозможно записать данные в транспортное соединение: существующее соединение было принудительно закрыто удаленный узел.

 public Connection()
{
try
{
client = new TcpClient("127.0.0.1", 7171);
writer = new StreamWriter(client.GetStream());
client.Client.NoDelay = true;
client.NoDelay = true;

sendFirstPacket();
while (true)
{
if (client.GetStream().DataAvailable)
Logger.log(Log_Type.ERROR, "mam cos");

sendFirstPacket();
}
Logger.log(Log_Type.INFO, "Spoko luz");
}
catch (Exception ex)
{
Logger.log(Log_Type.ERROR, ex.Message);
}
finally
{
//client.Close();
}
}

void onSendDone()
{
}

void sendFirstPacket()
{
writer.Write((byte)10);
writer.Write((ushort)2);
writer.Write((ushort)854);
UInt32[] k = new UInt32[4];

k[0] = (12444 << 16) | 12444;
k[1] = (12444 << 16) | 12444;
k[2] = (12444 << 16) | 12444;
k[3] = (12444 << 16) | 12444;

writer.Write((byte)0); // first byte have to be 0
writer.Write((UInt32)k[0]);
writer.Write((UInt32)k[1]);
writer.Write((UInt32)k[2]);
writer.Write((UInt32)k[3]);
writer.Flush();
//client.GetStream().Write(
}

Что может быть причиной этого?

0

Решение

Похоже, у вас есть проблемы на стороне сервера. Например, вы можете пытаться прочитать больше байтов, чем отправляете, что может показаться «фиксированным», если вы отправляете много сообщений быстро.

0

Другие решения


По вопросам рекламы [email protected]