2013-04-23 3 views
3

Итак, я пытаюсь создать очень простую систему для отправки сообщений от клиента на сервер (а позже и от сервера к клиенту, но сначала для детей). Я не уверен, как использовать UDPClient для отправки и получения сообщений (особенно для их получения), главным образом потому, что у меня нет ничего, запускающего функцию ReceiveMessage(), и я не уверен, что будет.Visual Basic UDPClient Server/Клиентская модель?

Исходный код указан по этой ссылке, выберите Файл> Загрузить. Он уже построен, если вы хотите просто запустить exe.

Итак, мой вопрос в основном: как я могу легко использовать UDPClient, как я могу заставить эту систему работать и какие советы для выполнения такого рода соединений? Все, что я должен соблюдать (потоки, проблемы с кодом и т. Д.)?

Source.

+0

Нужно ли использовать UDP? Вы смотрите на AMPQ? Попробуйте посетить http://www.rabbitmq.com –

+1

Google - ваш друг, я думаю, вы должны сначала попробовать найти исследование перед публикацией вопросов. Мой предыдущий пост, чтобы показать вам, что есть другие альтернативы для доставки сообщений. Хорошая удача –

+0

Существует причина, по которой я задавал здесь вопрос, потому что я не нашел никаких применимых результатов во время поиска в Интернете, и результаты, которые я нашел, имели проблемы или не помогли мне. – Postman

ответ

3

Для этого вам необходимо сначала установить два UdpClient. Один клиент для прослушивания, а другой - для отправки данных. (Вы также должны выбрать бесплатно/неиспользованные номер порта и знать IP-адрес вашей цели. - машину вы хотите отправить данные в)

Чтобы настроить приемник,

  1. Инстанцировать вашу UdpClient переменный с номером порта, который вы выбрали ранее,

  2. Создать новую нить, чтобы избежать блокировок во время приема данных,

  3. Loop над клиентом получить метод до тех пор, как вы хотите получить данные (выполнение Петли должно быть в пределах нового потока),

  4. Когда вы получаете один много данных (так называемые «пакетом») вы можете необходимо преобразовать массив байтов в нечто более значимое,

  5. Создайте способ выхода из цикла, когда вы хотите закончить прием данных.

Чтобы установить отправитель,

  1. Инстанцировать вашу UdpClient переменный с номером порта, который вы выбрали ранее (вы можете включить возможность отправлять широковещательные пакеты. Это позволяет передавать данные всем слушателям в вашей локальной сети),

  2. Когда вам нужно передать данные, преобразуйте данные в массив байтов, а затем позвоните по номеру Send().

Я бы предположить, что у вас есть быстрый скользят прочитать this.

Вот код, чтобы вы начали ...

'''''''''''''''''''''''Set up variables'''''''''''''''''''' 
Private Const port As Integer = 9653       'Port number to send/recieve data on 
Private Const broadcastAddress As String = "255.255.255.255" 'Sends data to all LOCAL listening clients, to send data over WAN you'll need to enter a public (external) IP address of the other client 
Private receivingClient As UdpClient       'Client for handling incoming data 
Private sendingClient As UdpClient       'Client for sending data 
Private receivingThread As Thread       'Create a separate thread to listen for incoming data, helps to prevent the form from freezing up 
Private closing As Boolean = False       'Used to close clients if form is closing 

''''''''''''''''''''Initialize listening & sending subs''''''''''''''''' 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Me.Load 
    InitializeSender()   'Initializes startup of sender client 
    InitializeReceiver()  'Starts listening for incoming data            
End Sub 

''''''''''''''''''''Setup sender client''''''''''''''''' 

Private Sub InitializeSender() 
    sendingClient = New UdpClient(broadcastAddress, port) 
    sendingClient.EnableBroadcast = True 
End Sub 

'''''''''''''''''''''Setup receiving client''''''''''''' 

Private Sub InitializeReceiver() 
    receivingClient = New UdpClient(port) 
    Dim start As ThreadStart = New ThreadStart(AddressOf Receiver) 
    receivingThread = New Thread(start)        
    receivingThread.IsBackground = True        
    receivingThread.Start()          
End Sub 

'''''''''''''''''''Send data if send button is clicked''''''''''''''''''' 

Private Sub sendBut_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sendBut.Click 
    Dim toSend As String = tbSend.Text     'tbSend is a textbox, replace it with whatever you want to send as a string 
    Dim data() As Byte = Encoding.ASCII.GetBytes(toSend)'Convert string to bytes 
    sendingClient.Send(data, data.Length)    'Send bytes 
End Sub 

'''''''''''''''''''''Start receiving loop''''''''''''''''''''''' 

Private Sub Receiver() 
    Dim endPoint As IPEndPoint = New IPEndPoint(IPAddress.Any, port) 'Listen for incoming data from any IP address on the specified port (I personally select 9653) 
    While (True)              'Setup an infinite loop 
     Dim data() As Byte           'Buffer for storing incoming bytes 
     data = receivingClient.Receive(endPoint)      'Receive incoming bytes 
     Dim message As String = Encoding.ASCII.GetString(data)  'Convert bytes back to string 
     If closing = True Then          'Exit sub if form is closing 
      Exit Sub 
     End If 
    End While 
End Sub 

'''''''''''''''''''Close clients if form closes'''''''''''''''''' 

Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles Me.FormClosing 
    closing = True   'Tells receiving loop to close 
    receivingClient.Close() 
    sendingClient.Close() 
End Sub 

Вот несколько других exmples: Here, here, here и here.

0
Imports System.Threading 

Shared client As UdpClient 
Shared receivePoint As IPEndPoint 

client = New UdpClient(2828) 'Port 
receivePoint = New IPEndPoint(New IPAddress(0), 0) 

Dim readThread As Thread = New Thread(New ThreadStart(AddressOf WaitForPackets)) 
readThread.Start() 

Public Shared Sub WaitForPackets() 
    While True 
     Dim data As Byte() = client.Receive(receivePoint) 
     Console.WriteLine("=" + System.Text.Encoding.ASCII.GetString(data)) 
    End While 
End Sub