Игнорирование входящих данных в TcpClient/NetworkStream

Для связи с некоторым сторонним ПО мне нужно установить однонаправленное соединение по TCP. Моему программному обеспечению нужно только отправлять данные на другую сторону, и оно никогда не будет считывать данные. В настоящее время я использую TcpClient. Что произойдет, если входящие пакеты все же будут, а я их не прочитаю? Могут ли они накапливаться где-то и приводить к каким-то ошибкам или тому подобному? Как мне настроить TcpClient, чтобы он игнорировал или отбрасывал все входящие данные?

Весь дизайн не совсем то, что я бы сделал, но я не могу изменить другое программное обеспечение, и мне нужно смириться с этим.

Несколько хороших советов по битам внутри TcpClient были бы очень полезны!


person Martin    schedule 29.04.2011    source источник


Ответы (2)


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

person Kevin Hsu    schedule 29.04.2011
comment
К вашему сведению, буфер, вероятно, не существует на уровне TcpClient — вероятно, он довольно глубоко в сетевом стеке. - person Kevin Hsu; 29.04.2011
comment
Другая сторона сможет отправлять данные, даже если буфер приема OP заполнен. - person jgauffin; 29.04.2011
comment
Когда буфер принимающей стороны заполнен, я не понимаю, как отправляющая сторона может логически передать больше данных. Кто-то должен хранить его, и это будут не маршрутизаторы. Мне кажется логичным, что отправляющая сторона должна его буферизовать. - person Kevin Hsu; 29.04.2011
comment
Вы имеете в виду, что должно быть много сообщений "эй, не присылайте мне больше данных, я полные пакеты ходят по всему интернету?" Я так не думаю... - person jgauffin; 30.04.2011
comment
Нет, я не говорю, что так бывает. Я просто говорю, что отправитель участвует в буферизации данных, а получатель имеет право ограничить буфер или не буферизовать его вообще. Я думаю, что отправитель в основном получает данные от получателя о том, как управлять потоком. - person Kevin Hsu; 30.04.2011

С вашей точки зрения ничего не произойдет. Данные будут удалены.

person jgauffin    schedule 29.04.2011