Рейтинг@Mail.ru

Как написать простой UDP чат на .NET

Пишем простой UDP чат на .NET.

Особенности сетевого протокола UDP

Протокол UDP – распространённый сетевой пакетный протокол передачи данных по сети Ethernet. Он отличается от другого распространённого протокола TCP в основном тем, что не требует подтверждения доставки пакета. То есть протокол не даёт гарантии, что ваши данные будут получены адресатом или буду получены полностью и в том порядке, в каком были отправлены. Эта одна сторона медали. Вторая же заключается в том, что из-за отсутствия проверок успеха доставки и повторных отправлений при сбоях, скорость обмена данными возрастает. В нашем простеньком чате это не будет иметь особого значения, но если решим создать приложение посерьёзнее, то будем помнить об этой особенности протокола UDP.

Общая идея UDP чата

Я покажу общую идею реализации. Для ясности демонстрации идеи, предположим, что чат у нас будет односторонним. Это будут две программы, одна из которых станет передатчиком сообщений, назовём её условно UDP Sender, а вторая – приёмником – UDP Receiver. Для полноценного чата нужно реализовывать многопоточное приложение с двунаправленной связью. Писать будем на VB.NET.

Реализация отправителя данных "UDP Sender"

Сначала напишем код отправителя данных (на VB.NET).

Реализация отправителя "UDP Sender" (разворачивается)
Imports System.Net.Sockets

Sub Main(ByVal hostName as String, ByVal port as Integer)
   Using udpClient As New UdpClient
       udpClient.Connect(hostName, port)
       udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, True)
       Do       
           Console.Write("Введите сообщение: ")
           Dim msg As String = Console.ReadLine()
           Dim arrayToSend As Byte() = Encoding.Unicode.GetBytes(msg)
           udpClient.Send(arrayToSend, arrayToSend.Length)
       Loop 
   End Using
End Sub

Реализация получателя данных "UDP Receiver"

Теперь напишем код приёмной стороны (на VB.NET).

Реализация приёмника "UDP Receiver" (разворачивается)
Imports System.Net
Imports System.Net.Sockets

Sub Main()
    Dim endPt As New IPEndPoint(IPAddress.Any, ListenPort)
    Using udpClient As New UdpClient()
        udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, True)
        udpClient.Client.Bind(endPt)
        Do
            Dim recieved As Byte() = udpClient.Receive(endPt)
            Dim msg As String = Encoding.Unicode.GetString(recieved)
            Console.Write("Получено сообщение: ")
            Console.WriteLine(msg)
        Loop 
    End Using
End Sub

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

Консольный UDP чат, написанный на .NET
Консольный UDP чат, написанный на .NET

Теперь, при желании, не сложно реализовать чат, обеспечивающий двухстороннюю связь.

Скачать программы "UDP Sender" и "UDP Receiver"

Готовое приложение UDP чата можно скачать по ссылкам:

Работает наш чат под ОС Windows и требует .NET 3.5.

Последнее изменениеВторник, 05 Декабрь 2017 20:25
(1 Голосовать)
Прочитано 179 раз

Поделиться

Оставить комментарий

Убедитесь, что вы вводите (*) необходимую информацию, где нужно
HTML-коды запрещены