Работа с сокетами: клиент-сервер работает только из под отладки - C#
Формулировка задачи:
Пытаюсь осилить сетевое программирование, отойдя чуть дальше простых примеров. В отладчике работает на 50%, а при запуске из консоли не работает вообще.
отрывок кода клиента:
В общем создается поток запускающий ClientReadThread(), из Stream gstm вытягиваю первые два байта - это размер пакета (введен воизбежание склеивания отдельных пакетов). Затем в куче под размер пакета выделяется массив. Ну и читаем пока не примем весь пакет.. Так вот в режиме отладки, если не спеша переходить по точкам останова, то все гуд. Если запустить собранное приложений из консоли.. то ничего. Даже ексепшн не вываливается.
Буду очень благодарен, если кто-то потратит свое время на обьяснение.
* * *
public static System.IO.Stream gstm; //link stream
public static System.Net.Sockets.TcpClient link;
link = new System.Net.Sockets.TcpClient();
link.Connect("127.0.0.1", 2106);
try
{
gstm = gamelink.GetStream();
}
* * *
private int readPktSize(Stream stream)
{
int size;
size = stream.ReadByte();
size |= (stream.ReadByte() << 8);
return size;
}
private void setSize_b2(ref byte[] array, int size)
{
array[0] = (byte) size;
array[1] = (byte)(size >> 8);
}
private void ClientReadThread()
{
byte[] buffread = new byte[BUFFER_MAX];
int size = readPktSize(gstm);
byte[] data = new byte[size];
setSize_b2(ref data, size);
int cnt_read = new int();
int offset = 2;
while (cnt_read < size - 2)
{
cnt_read += gstm.Read(data, offset+cnt_read, size-cnt_read-offset);
}
Console.WriteLine("{0} {1} {2} {3}", data[0], data[1], data[2], data[3]);
Console.Read();
}//end of read dataРешение задачи: «Работа с сокетами: клиент-сервер работает только из под отладки»
textual
Листинг программы
client.Connect("localhost", 5555); //или какой там у вас порт