сокеты
От: Аноним  
Дата: 07.12.10 12:18
Оценка:
Есть клиент, работающий через 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("Связь с клиентом потеряна");
            }


        }


в общем, проблема в том, что данный код получает один пакет и всё, подскажите, в чём проблема?
Re: сокеты
От: 1stein Украина  
Дата: 07.12.10 12:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Есть клиент, работающий через TcpClient, при создании клиента, я включаю асинхронное чтение, выглядит это так:

А>в общем, проблема в том, что данный код получает один пакет и всё, подскажите, в чём проблема?

А зачем Вы каждый раз создаете NetworkStream заново?
По сути, вы начинаете новый сеанс связи с сервером.
Посмотрите здесь NetworkStream.EndRead Method
Will code C# for food
Re[2]: сокеты
От: Аноним  
Дата: 07.12.10 13:11
Оценка:
Здравствуйте, 1stein, Вы писали:

1>Здравствуйте, Аноним, Вы писали:


А>>Есть клиент, работающий через TcpClient, при создании клиента, я включаю асинхронное чтение, выглядит это так:

А>>в общем, проблема в том, что данный код получает один пакет и всё, подскажите, в чём проблема?

1>А зачем Вы каждый раз создаете NetworkStream заново?

1>По сути, вы начинаете новый сеанс связи с сервером.
1>Посмотрите здесь NetworkStream.EndRead Method

Ничего не изменилось, всё равно читаеться не более чем 1 раз
Re[3]: сокеты
От: 1stein Украина  
Дата: 07.12.10 15:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Ничего не изменилось, всё равно читаеться не более чем 1 раз


Что такое m_buf и что делается в методах forward_packet & m_buf.get_packet
Will code C# for food
Re[4]: сокеты
От: Аноним  
Дата: 07.12.10 16:06
Оценка:
Здравствуйте, 1stein, Вы писали:

1>Здравствуйте, Аноним, Вы писали:


А>>Ничего не изменилось, всё равно читаеться не более чем 1 раз


1>Что такое m_buf и что делается в методах forward_packet & m_buf.get_packet


не имеет значение, не запускается следующее асинхронное чтение, вот в чём проблема
Re: сокеты
От: Аноним  
Дата: 07.12.10 18:12
Оценка:
Фактически, я хочу добиться функциональности уровня beginaccept, тоесть чтобы вызывалась функция обратного вызова при получении нового сообщения сервером, может я вообще не в ту сторону копаю? (%
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.