Есть клиент, работающий через TcpClient, при создании клиента, я включаю асинхронное чтение, выглядит это так:
public org_client(TcpClient _client, server _srv) {
m_srv = _srv;
m_client = _client;
m_client.GetStream().BeginRead(tmpBuf, 0, tmpBuf.Length, new AsyncCallback(receive_callback), null);
}
коллбэк следующий:
private void receive_callback(IAsyncResult ar) {
try {
int numberOfBytesRead = m_client.GetStream().EndRead(ar);
m_buf.add_data(tmpBuf, numberOfBytesRead);
while(m_buf.HasPacket)
forward_packet(m_buf.get_packet());
m_client.GetStream().BeginRead(tmpBuf, 0, tmpBuf.Length, new AsyncCallback(receive_callback), null);
}
catch {
Console.WriteLine("Связь с клиентом потеряна");
}
}
в общем, проблема в том, что данный код получает один пакет и всё, подскажите, в чём проблема?
Здравствуйте, Аноним, Вы писали:
А>Есть клиент, работающий через TcpClient, при создании клиента, я включаю асинхронное чтение, выглядит это так:
А>в общем, проблема в том, что данный код получает один пакет и всё, подскажите, в чём проблема?
А зачем Вы каждый раз создаете NetworkStream заново?
По сути, вы начинаете новый сеанс связи с сервером.
Посмотрите здесь
NetworkStream.EndRead Method
Здравствуйте, 1stein, Вы писали:
1>Здравствуйте, Аноним, Вы писали:
А>>Есть клиент, работающий через TcpClient, при создании клиента, я включаю асинхронное чтение, выглядит это так:
А>>в общем, проблема в том, что данный код получает один пакет и всё, подскажите, в чём проблема?
1>А зачем Вы каждый раз создаете NetworkStream заново?
1>По сути, вы начинаете новый сеанс связи с сервером.
1>Посмотрите здесь NetworkStream.EndRead Method
Ничего не изменилось, всё равно читаеться не более чем 1 раз
Фактически, я хочу добиться функциональности уровня beginaccept, тоесть чтобы вызывалась функция обратного вызова при получении нового сообщения сервером, может я вообще не в ту сторону копаю? (%