Мы пишем Клиентская программа и TCPServer. Сколько пространства находится там в буфере TcpClient? Как, в том, какая точка это начнет выбрасывать данные? Мы пытаемся определить, может ли TcpClient блокироваться или если он должен войти в свой собственный фоновый поток (так, чтобы буфер не мог стать полным)..
Размеры буфера можно получить из TcpClient.ReceiveBufferSize и TcpClient.SendBufferSize .
Доступные размеры буфера будут изменяться в зависимости от того, получены / подтверждены (или нет) данные на уровне TCP. TcpClient по умолчанию блокируется.
Никакие данные не будут выброшены в результате заполнения буферов, хотя данные могут быть выброшены в условиях ошибки (например, одноранговый узел исчезает / аварийно завершает работу / завершается и т. Д.)
В документации MSDN указано, что размер буферов отправки и приема по умолчанию для TcpClient
] составляет 8192 байта или 8 КБ. В документации не указано ограничение на размер этих буферов.
Я уверен, что вы знаете, что вы отправляете и получаете данные через TcpClient
, используя его базовый объект NetworkStream
. Вы сами решаете, синхронные это или асинхронные операции. Если вы хотите синхронное поведение, используйте методы Чтение
и Запись
в NetworkStream
. Если вы хотите асинхронного поведения, используйте операции BeginRead
/ EndRead
и BeginWrite
/ EndWrite
.
Если вы получаете данные как часть внешнего приложения, я настоятельно рекомендую делать это во вторичном потоке, независимо от того, делаете ли вы это с помощью асинхронных методов или синхронно в отдельном потоке. Это позволит вашему пользовательскому интерфейсу реагировать на пользователя, продолжая обрабатывать отправку и получение данных в фоновом режиме.