2013-04-23 1 views
3

그래서 나는 클라이언트에서 서버로 메시지를 보내는 아주 간단한 시스템을 만들려고 노력하고있다. UDPClient를 사용하여 메시지를 수신하고 수신하는 방법을 잘 모르겠습니다. (특히 메시지를 수신하는 데) 주로 ReceiveMessage() 함수를 트리거하는 것이 없으므로 확실하지 않습니다.Visual Basic UDPClient 서버/클라이언트 모델?

소스 코드는이 링크에 있으며 파일> 다운로드로 이동하십시오. exe를 실행하고 싶다면 이미 빌드되어 있습니다.

내 질문은 기본적으로 : UDPClient을 어떻게 쉽게 사용할 수 있습니까?이 시스템을 작동 시키려면 어떻게해야하며 이런 종류의 연결을 실행하기위한 팁은 무엇이 있습니까? 내가 (스레드, 코드 문제 등) 조심해야 할 것은 무엇입니까?

Source.

+0

UDP를 사용해야합니까? AMPQ를 보셨습니까? http://www.rabbitmq.com을 방문하십시오. –

+1

Google은 귀하의 친구입니다. 먼저 질문을 게시하기 전에 조사를 시도해야한다고 생각합니다. 이전에 게시 한 내용은 메시징 전달을위한 다른 대안이 있음을 보여줍니다. 행운을 빌어 요 –

+0

인터넷 검색을하는 동안 적용 가능한 결과를 찾지 못했기 때문에 여기에 질문을 한 이유가 있습니다. 검색 결과에 문제가 있거나 제대로 작동하지 않았기 때문입니다. – Postman

답변

3

먼저 두 개의 UdpClient을 설정해야합니다. 청취 및 데이터 전송을위한 클라이언트. (당신은 또한 무료/사용하지 않는 포트 번호를 선택하고 대상의 IP 주소를 알아야합니다 -. 당신이 하려는 기계에 데이터를 전송)

수신기를 설정하려면,

  1. 은 데이터 수신 동안 차단 방지하기 위해 새 스레드를 생성, 이전에 선택한 포트 번호

  2. 당신의 UdpClient 변수의 인스턴스를

  3. 데이터를 받으려는 한 (루프의 실행은 새 스레드 내에 있어야 함) 클라이언트의 수신 방법을 반복하십시오.

  4. 많은 양의 데이터 ("패킷"이라고 함)를 수신하면 바이트 배열을 좀 더 의미있는 것으로 변환해야합니다.

  5. 데이터 수신을 완료 할 때 루프를 종료하는 방법을 만듭니다. 보낸 사람을 설정하려면

,

  1. 가 이전에 선택한 포트 번호와 UdpClient 변수를 인스턴스화 (당신이 브로드 캐스트 패킷을 보낼 수있는 기능을 활성화 할 수 있습니다. 이것은 당신이 데이터를 보낼 수 있습니다 LAN상의 모든 청취자에게)

  2. 데이터를 전송해야하는 경우 데이터를 바이트 배열로 변환 한 다음 Send()을 호출하십시오.

당신이 this을 읽어 빠른 탈지를하는 것이 좋습니다 것입니다. Here, here, herehere :

여기 여기

'''''''''''''''''''''''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입니다 ... 당신이 떨어져 시작하는 데 몇 가지 코드입니다.

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