Сколько буфера NetworkStream и TcpClient имеют?

Мы пишем Клиентская программа и TCPServer. Сколько пространства находится там в буфере TcpClient? Как, в том, какая точка это начнет выбрасывать данные? Мы пытаемся определить, может ли TcpClient блокироваться или если он должен войти в свой собственный фоновый поток (так, чтобы буфер не мог стать полным)..

5
задан Earlz 28 March 2010 в 18:23
поделиться

2 ответа

Размеры буфера можно получить из TcpClient.ReceiveBufferSize и TcpClient.SendBufferSize .

Доступные размеры буфера будут изменяться в зависимости от того, получены / подтверждены (или нет) данные на уровне TCP. TcpClient по умолчанию блокируется.

Никакие данные не будут выброшены в результате заполнения буферов, хотя данные могут быть выброшены в условиях ошибки (например, одноранговый узел исчезает / аварийно завершает работу / завершается и т. Д.)

7
ответ дан 13 December 2019 в 19:24
поделиться

В документации MSDN указано, что размер буферов отправки и приема по умолчанию для TcpClient ] составляет 8192 байта или 8 КБ. В документации не указано ограничение на размер этих буферов.

Я уверен, что вы знаете, что вы отправляете и получаете данные через TcpClient , используя его базовый объект NetworkStream . Вы сами решаете, синхронные это или асинхронные операции. Если вы хотите синхронное поведение, используйте методы Чтение и Запись в NetworkStream . Если вы хотите асинхронного поведения, используйте операции BeginRead / EndRead и BeginWrite / EndWrite .

Если вы получаете данные как часть внешнего приложения, я настоятельно рекомендую делать это во вторичном потоке, независимо от того, делаете ли вы это с помощью асинхронных методов или синхронно в отдельном потоке. Это позволит вашему пользовательскому интерфейсу реагировать на пользователя, продолжая обрабатывать отправку и получение данных в фоновом режиме.

4
ответ дан 13 December 2019 в 19:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: