C udp socket клиент сервер

C udp socket клиент сервер

Протокол UDP не требует установки постоянного подключения, и, возможно, многим покажется легче работать с UDP, чем с TCP. Большинство принципов при работе с UDP те же, что и с TCP.

Вначале создается сокет:

Если сокет должен получать сообщения, то надо привязать его к локальному адресу и одному из портов с помощью метода Bind:

После этого можно отправлять и получать сообщения. Для получения сообщений используется метод ReceiveFrom() :

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

Для отправки данных используется метод SendTo() :

В метод передается массив отправляемых данных, а также адрес, по которому эти данные надо отправить.

Создадим программу UDP-клиента:

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

После ввода портов запускается задача на прослушивание входящих сообщений. В отличие от tcp-сервера здесь не надо вызывать методы Listen и Accept. В бесконечном цикле мы напрямую можем получить получение данные с помощью метода ReceiveFrom() , который блокирует вызывающий поток, пока не придет очередная порция данных.

Этот метод возвращает через ref-параметр удаленную точку, с которой получены данные:

То есть, не смотря на то, что в данном случае прием и отправка сообщений разграничены и текущий клиент отправляет данные только на введенный вначале порт, но мы вполне можем добавить возможность ответа на сообщения, используя данные полученной удаленной точки (адрес и порт).

Читайте также:  Dc universe online гайды

В главном потоке происходит отправка сообщений с помощью метода SendTo()

Таким образом, приложение сразу осуществляет функции и сервера, и клиента.

Теперь запустим две копии приложения и введем разные данные для портов. Первый клиент:

My first question here. I am new to this kind of programming, and i’ve only programmed .NET web sites and forms.

Now, the company I work at, asks me to make an ActiveX component, that listens to UDP messages, and turns them into events.

The UDP msgs are send from Avaya system, so i was told that to test my ActiveX, at first I need to create an app, that only sends UDP (only one button that sends pre-defined UDP string). And then create listener socket, ordinary C# app, that will get those transmitted UDP string from the tests app. Both apps will work on the same machine.

Later, when i get this working, i need to make the listener an ActiveX component, but first things first.

I need to know if there are any good tutorials about this, and any idea on how to start? I am sorry for my ignorance, but i am really new on this and i don’t really have any time to learn this since it has to be done in 2 weeks.

Thanks in advance.

edit: I managed to create 2 simple console applications, and was sending UDP messages between them successfully. The sender will be only for testing, and now I need to re-make my receiver to get the UDP message and ‘translate’ it to events. And lastly, to make it an ActiveX control.

Читайте также:  Centos 7 virtualbox install

Теперь собственно вопрос что необходимо сохранять чтобы сделать список из подключенных клиентов и делать рассылку сообщений от других клиентов? Я понимаю что протокол UDP без установления соединения поэтому я не могу понять как сделать подобное приложение только на UDP. А так же мультиплеерных action(шутеры) играх используется протокол UDP, т.к. он благополучно влияет на ping который очень важен. Вопрос: Что бы отправить сообщение по UDP должен быть открыт порт что не есть хорошо(к примеру 1к игроков и укаждого должен быть открыт порт 34447)?

Мне к сожалению трудно дается протокол UDP, так что прошу прощения за возможную банальщину.

P.S. Попытался расписать все максимально подробно, если что то не понятно задавайте вопросы, а я отвечу вам на них(если смогу). И всем огромное спасибо за всеее.

  • Вопрос задан более года назад
  • 850 просмотров

UDP и TCP это разные протоколы над протоколом IP.
TCP устанавливает соединение и ведёт "разговор" между клиентом и сервером в рамках установленного соединения, пока кому-нибудь из них не надоест. В простейшем случае устанавливается соединение, клиент посылает запрос, сервер отправляет ответ. Размер полученных и отправляемых данных не ограничивается размером пакета. Пакетов может быть много, также может быть много запросов-ответов в рамках одного соединения. Доставку всех пакетов TCP гарантирует. В том смысле, если соединение есть, то отправленные вам данные будут доставлены.
UDP по сути просто отправка данных на какой-то адрес. Обработали его там или не обработали — для того, чтобы вам это узнать нужна дополнительная синхронизация. Размер передаваемых данных определяется размером пакета — максимум MTU, для Ethernet это 1500 байт. Может быть больше или меньше. Есть возможность отправить и больше данных, но они будут разбиты по частям и какие-то из них могут не дойти.
Аналогия примерно такая: TCP — телефон: соединение устанавливается, дальше идёт разговор между собеседниками. UDP — радиообмен: нажали PTT, говорите, но вы не знаете находится ли ваш абонент в зоне действия радио и услышит ли вас.

Читайте также:  Extended memory что это в биос

Для реализации и клиента и сервера UDP на C# можно использовать класс UDPClient. Он один и на сервер и на клиент. Для приёма сообщений сервер открывает порт на чтение. Размер принимаемых данных ограничен приёмным буфером. Если данные приходят, а вы их не успеваете обрабатывать — они затираются.
UDP используют для передачи данных, для которых критично время получения, но не критичен сам факт получения.
Для понимания того как ходят пакеты и устанавливается соединение используйте Wireshark или подобные программы.

Ссылка на основную публикацию
Adblock detector