2010-02-22 2 views
0

Предположим, что клиент отправляет несколько дейтаграмм на сервер через мое приложение. Если мое приложение на стороне сервера перестает работать и не может получать какие-либо датаграммы, но клиент по-прежнему продолжает отправлять больше данных на сервер через протокол UDP, куда идут эти датаграммы? Будут ли они оставаться в буфере данных операционной системы сервера (или что-то в этом роде)Где датаграммы, если клиент не прослушивает порт UDP?

Я задаю этот вопрос, потому что я хочу знать, что если клиент отправит 1000 дейтаграмм (по 1 тыс. Каждый) на компьютер через Интернет, будут отправлены эти 1000 датаграмм через интернет (потребляя полосу пропускания), даже если никто не слушает эти данные?

Если ответ «Да», как я должен прекратить это? Я имею в виду, что если сервер перестает работать, как я должен использовать UDP, чтобы узнать факт и прекратить дальнейшую отправку?

Благодаря

ответ

1

Я задаю этот вопрос, потому что я хочу знать, что если клиент посылает 1000 дейтаграмм (1K каждый) на ПК через Интернет, будут те 1000 датаграмм идут через Интернет (потребляя пропускную способность), даже если никто не слушает эти данные?

Да

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

Вам нужен контур контроля уровня протокола, то есть вам необходимо реализовать протокол, чтобы позаботиться об этой ситуации. UDP не является ориентированным на соединение, поэтому до «приложения», использующего UDP для учета этого отказа.

+0

Спасибо за ваш ответ. Так что если сервер в Интернете ничего не работает, и я использую udpclient для отправки, скажем, 100 МБ данных, ОС на сервере все равно получит его? и я по-прежнему буду потреблять 100 МБ данных bandwidht на сервере? – Jack

+0

Да, если у вас нет чего-то промежуточного, которое, конечно же, отфильтровывает их. Это один из способов генерировать отказ в обслуживании ... – jldupont

+0

Спасибо. Поэтому, если я действительно отправляю данные UDP 100 МБ на какой-либо сервер, если ОС этого сервера обнаруживает отправку, и если никто на сервере не получит его, он будет генерировать DoS? – Jack

0

UDP сам по себе не предоставляет возможности для определения того, успешно ли получено сообщение клиентом или нет. Вам нужен TCP, чтобы установить надежное соединение и после отправки данных через UDP.

0

Самое низкое служебное решение было бы типом типа keep-alive типа jdupont. Вы также можете изменить использование tcp, который предоставляет вам эту возможность.

Смежные вопросы