2013-08-30 2 views
0

У меня есть клиент-серверное приложение. Мне нужен способ асинхронно заглянуть, какой клиент отправляет сервер и соответственно реагировать. У меня есть доступ только к сетевому потоку, поэтому, если я использую NetworkStream.Read(), я теряю данные, которые были в потоке. Я попытался записать данные обратно в поток, но затем я все еще не могу получить доступ к потоку на стороне сервера.Чтение из сетевого потока без потери данных

Есть ли способ заглянуть в NetworkStream? Если я не ошибаюсь, есть путь к этому, используя объект сокета и вызывающий метод Receive. Проблема в том, что свойство socket в NetworkStream защищено, поэтому я не могу его использовать. Могу ли я получить доступ к этому конкретному сокету?

Благодарим за помощь.

+0

Вы хотите подглядеть данные сокета, не удаляя его из потока? Существует «Read (buff, 0, length, MSG_PEEK)», который будет возвращать данные, не удаляя их из потока. –

+0

Ситуация выглядит следующим образом: клиент отправляет запрос на сервер, мне нужно заглянуть в поток, если запрос содержит конкретное сообщение. Сервер должен получить запрос после того, как я просмотрю поток. Проблема в том, что пользователь отправляет запрос, после чего начинается обработка. Сервер может быть запрошен для остановки обработки в среднем времени, поэтому мне нужно прослушивать один и тот же поток асинхронно. У меня есть доступ только к потоку, а не к базовому сокету. – Divh

+0

humm, я вижу. Есть что-то срочные данные, которые отличаются от обычных данных. Я боюсь, что вам нужно получить доступ к сокету, чтобы добраться до срочных данных. Когда вы видите, что срочный пакет является индикатором того, что сервер хочет прекратить обработку. Почему вы не можете получить доступ к базовому сокету? –

ответ

0

Нет, в основном. Он не предоставляет API-интерфейс peek. Вам нужно будет поддерживать собственный буфер. Примечание: вы также не можете записать обратно в поток чтения - если вы пишете в NetworkStream, вы отправляете эти данные на другой компьютер.