Results 1 to 3 of 3

Thread: [RESOLVED] UDP Receive/Send

  1. #1

    Thread Starter
    New Member
    Join Date
    May 2006
    Posts
    12

    Resolved [RESOLVED] UDP Receive/Send

    I was experimenting with code from
    http://www.codeproject.com/KB/IP/UDP_Send_Receive.aspx
    I was hoping to find an application that did both in one application
    I am ale to listen to a port and display the byte stream received in
    a listbox, the text box does no good because the data received would
    not make sense.
    A good Example of what I get in the list box is
    34
    0
    0
    0
    35
    0
    0
    0
    152
    135
    157
    0

    I wish to reply back to the IP/Port that sent me this from the same port I received it on plus 10 more byte
    here is what i have so far
    The data in listbox lbSend is the information i wish to send back


    Code:
    Imports System.IO
    Imports System.Net.Sockets.Socket
    Imports System
    Imports System.Text
    Imports System.Net
    Imports System.Net.Sockets
    Imports Microsoft.VisualBasic
    Imports System.Runtime.InteropServices
    Public Class Form1
        Inherits System.Windows.Forms.Form
        Public receivingUdpClient As UdpClient
        Public RemoteIpEndPoint As New System.Net.IPEndPoint(System.Net.IPAddress.Any, 0)
        Public ThreadReceive As System.Threading.Thread
        Dim SocketNO As Integer
        Dim GLOIP As IPAddress
        Dim GLOINTPORT As Integer
        'Dim bytCommand As Byte() = New Byte() {}
        Dim udpClient As New UdpClient
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            chkBit.Checked = True
            lbReceived.Items.Clear()
        End Sub
        Public Sub ReceiveMessages()
            Try
                Dim receiveBytes As [Byte]() = receivingUdpClient.Receive(RemoteIpEndPoint)
                txtIP.Text = RemoteIpEndPoint.Address.ToString
                txtPort.Text = RemoteIpEndPoint.Port.ToString
                Dim BitDet As BitArray
                BitDet = New BitArray(receiveBytes)
    
                Dim strReturnData As String = System.Text.Encoding.Unicode.GetString(receiveBytes)
                Console.WriteLine("A message is received from IP/port " & txtIP.Text & "/ " & txtPort.Text & " and being processed")
                TextBox1.Text = TextBox1.Text & vbCrLf & "A message is received from " & txtIP.Text & "/ " & txtPort.Text & " and being processed"
                Console.WriteLine("The length of the message is ")
                TextBox1.Text = TextBox1.Text & vbCrLf & "The length of the message is "
                Console.WriteLine(receiveBytes.Length)
                TextBox1.Text = TextBox1.Text & receiveBytes.Length
                Console.WriteLine(strReturnData)
                TextBox1.Text = TextBox1.Text + vbCrLf + "The message received is """
                TextBox1.Text = TextBox1.Text & Encoding.Unicode.GetChars(receiveBytes) + """"
                TextBox1.Text = TextBox1.Text & vbCrLf
                TextBox1.Text = TextBox1.Text + "The Received bytes are "
                For cnt As Integer = 0 To receiveBytes.Length - 1
                    TextBox1.Text = TextBox1.Text & receiveBytes(cnt) & " "
                    lbReceived.Items.Add(receiveBytes(cnt))
                Next
                txtReceived.Text = receiveBytes.Length
                TextBox1.Text = TextBox1.Text & vbCrLf
                Dim tempStr As String
                Dim tempStr2 As String
                If chkBit.Checked = True Then
                    Dim i As Integer
                    i = 0
                    Dim j As Integer
                    j = 0
                    Dim line As Integer
                    line = 0
                    TextBox1.Text = TextBox1.Text + line.ToString & ") "
                    For j = 0 To BitDet.Length - 1
                        If BitDet(j) = True Then
                            Console.Write("1 ")
                            tempStr2 = tempStr
                            tempStr = " 1" + tempStr2
                        Else
                            Console.Write("0 ")
                            tempStr2 = tempStr
                            tempStr = " 0" + tempStr2
                        End If
                        i += 1
                        If i = 8 And j <= (BitDet.Length - 1) Then
                            line += 1
                            i = 0
                            TextBox1.Text = TextBox1.Text + tempStr
                            tempStr = ""
                            tempStr2 = ""
                            TextBox1.Text = TextBox1.Text + vbCrLf
                            If j <> (BitDet.Length - 1) Then
                                TextBox1.Text = TextBox1.Text + line.ToString & ") "
                                Console.WriteLine()
                            End If
                        End If
                    Next
                End If
                TextBox1.Text = TextBox1.Text & vbCrLf
                NewInitialize()
                For cnt As Integer = 4 To receiveBytes.Length - 1
                    lbSend.Items.Add(receiveBytes(cnt))
                Next
                lbSend.Items.Add(68)
                lbSend.Items.Add(205)
                lbSend.Items.Add(160)
                lbSend.Items.Add(92)
                lbSend.Items.Add(32)
                lbSend.Items.Add(61)
                lbSend.Items.Add(0)
                lbSend.Items.Add(42)
                lbSend.Items.Add(255)
                lbSend.Items.Add(255)
                lbSend.Items.Add(255)
                lbSend.Items.Add(255)
            Catch e As Exception
                Console.WriteLine(e.Message)
            End Try
            Send_Back()
        End Sub
        Public Sub NewInitialize()
            Console.WriteLine("Thread *Thread Receive* reinitialized")
            ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessages)
            ThreadReceive.Start()
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            lbReceived.Items.Clear()
            txtReceived.Text = ""
            Try
                SocketNO = txtSocket.Text
                receivingUdpClient = New System.Net.Sockets.UdpClient(SocketNO)
                ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessages)
                ThreadReceive.Start()
                TextBox1.Enabled = True
                Button2.Enabled = True
                Button1.Enabled = False
                txtSocket.ReadOnly = True
            Catch x As Exception
                Console.WriteLine(x.Message)
                TextBox1.Text = TextBox1.Text & vbCrLf & x.Message
            End Try
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            'lbReceived.Items.Clear()
            Try
                ThreadReceive.Abort()
                receivingUdpClient.Close()
                'TextBox1.Text = "INFORMATION"
                TextBox1.Enabled = False
                Button2.Enabled = False
                Button1.Enabled = True
                txtIP.Text = ""
                txtSocket.ReadOnly = False
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
    
        End Sub
        Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
            Try
                receivingUdpClient.Close()
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Sub
        Private Sub Send_Back()
            Dim pRet As Integer
    
            Try
                GLOIP = IPAddress.Parse(txtIP.Text)
                GLOINTPORT = txtPort.Text
                udpClient.Connect(GLOIP, GLOINTPORT)
                'bytCommand = Encoding.ASCII.GetBytes(txtMessage.Text)
                'pRet = udpClient.Send(bytCommand, bytCommand.Length)
                Console.WriteLine("No of bytes send " & pRet)
                'txtInfo.Text = "INFORMATION" & vbCrLf & "No of bytes send " & pRet
                'Console.WriteLine(Encoding.ASCII.GetString(bytCommand))
                'txtInfo.Text = txtInfo.Text + vbCrLf + "The messege send is """
                'txtInfo.Text = txtInfo.Text & Encoding.ASCII.GetChars(bytCommand) & """"
                Dim BitDet As BitArray
                'BitDet = New BitArray(bytCommand)
                'txtInfo.Text = txtInfo.Text + vbCrLf
                Dim tempStr As String
                Dim tempStr2 As String
                Dim i As Integer
                i = 0
                Dim j As Integer
                j = 0
                Dim line As Integer
                line = 0
                'txtInfo.Text = txtInfo.Text + line.ToString & ") "
                For j = 0 To BitDet.Length - 1
                    If BitDet(j) = True Then
                        Console.Write("1 ")
                        tempStr2 = tempStr
                        tempStr = " 1" + tempStr2
                    Else
                        Console.Write("0 ")
                        tempStr2 = tempStr
                        tempStr = " 0" + tempStr2
                    End If
                    i += 1
                    If i = 8 And j <= (BitDet.Length - 1) Then
                        line += 1
                        i = 0
                        'txtInfo.Text = txtInfo.Text + tempStr
                        tempStr = ""
                        tempStr2 = ""
                        'txtInfo.Text = txtInfo.Text + vbCrLf
                        If j <> (BitDet.Length - 1) Then
                            'txtInfo.Text = txtInfo.Text + line.ToString & ") "
                            Console.WriteLine()
                        End If
                    End If
                Next
    
    
    
    
            Catch ex As Exception
                Console.WriteLine(ex.Message)
                'txtInfo.Text = txtInfo.Text & vbCrLf & ex.Message
            End Try
    
        End Sub
    End Class

  2. #2

    Thread Starter
    New Member
    Join Date
    May 2006
    Posts
    12

    Re: UDP Receive/Send

    I found a way to get the info and post back to the client.
    Code:
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            chkBit.Checked = False
            lbReceived.Items.Clear()
            Listen()
        End Sub
        Public Sub ReceiveMessages()
            Try
                Dim receiveBytes As [Byte]() = receivingUdpClient.Receive(RemoteIpEndPoint)
                txtIP.Text = RemoteIpEndPoint.Address.ToString
                txtPort.Text = RemoteIpEndPoint.Port.ToString
                Dim BitDet As BitArray
                BitDet = New BitArray(receiveBytes)
                Set_IP()
                Dim strReturnData As String = System.Text.Encoding.Unicode.GetString(receiveBytes)
                If chkBit.Checked = True Then
                    Console.WriteLine("A message is received from IP/port " & txtIP.Text & "/ " & txtPort.Text & " and being processed")
                    TextBox1.Text = TextBox1.Text & vbCrLf & "A message is received from " & txtIP.Text & "/ " & txtPort.Text & " and being processed"
                    Console.WriteLine("The length of the message is ")
                    TextBox1.Text = TextBox1.Text & vbCrLf & "The length of the message is "
                    Console.WriteLine(receiveBytes.Length)
                    TextBox1.Text = TextBox1.Text & receiveBytes.Length
                    Console.WriteLine(strReturnData)
                    TextBox1.Text = TextBox1.Text + vbCrLf + "The message received is """
                    TextBox1.Text = TextBox1.Text & Encoding.Unicode.GetChars(receiveBytes) + """"
                    TextBox1.Text = TextBox1.Text & vbCrLf
                    TextBox1.Text = TextBox1.Text + "The Received bytes are "
                    For cnt As Integer = 0 To receiveBytes.Length - 1
                        TextBox1.Text = TextBox1.Text & receiveBytes(cnt) & " "
                        lbReceived.Items.Add(receiveBytes(cnt))
                    Next
                End If
                x = 0
                For cnt2 As Integer = 4 To receiveBytes.Length - 1
                    sendBytes(x) = receiveBytes(cnt2)
                    x = x + 1
                Next
    
                TextBox1.Text = TextBox1.Text & vbCrLf
                Dim tempStr As String
                Dim tempStr2 As String
                If chkBit.Checked = True Then
                    Dim i As Integer
                    i = 0
                    Dim j As Integer
                    j = 0
                    Dim line As Integer
                    line = 0
                    TextBox1.Text = TextBox1.Text + line.ToString & ") "
                    For j = 0 To BitDet.Length - 1
                        If BitDet(j) = True Then
                            Console.Write("1 ")
                            tempStr2 = tempStr
                            tempStr = " 1" + tempStr2
                        Else
                            Console.Write("0 ")
                            tempStr2 = tempStr
                            tempStr = " 0" + tempStr2
                        End If
                        i += 1
                        If i = 8 And j <= (BitDet.Length - 1) Then
                            line += 1
                            i = 0
                            TextBox1.Text = TextBox1.Text + tempStr
                            tempStr = ""
                            tempStr2 = ""
                            TextBox1.Text = TextBox1.Text + vbCrLf
                            If j <> (BitDet.Length - 1) Then
                                TextBox1.Text = TextBox1.Text + line.ToString & ") "
                                Console.WriteLine()
                            End If
                        End If
                    Next
                End If
                TextBox1.Text = TextBox1.Text & vbCrLf
                NewInitialize()
    
                'this works junk in send buffer
                sendBytes(14) = 0
                sendBytes(15) = 42
    
                '# of user to show in evo, if all are 255 returns ?
                sendBytes(16) = 0
                sendBytes(17) = 0
                sendBytes(18) = 0
                sendBytes(19) = 20
    
                If chkBit.Checked = True Then
                    For cnt As Integer = 0 To 19
                        lbSend.Items.Add(sendBytes(cnt))
                    Next
                End If
            Catch e As Exception
                Console.WriteLine(e.Message)
            End Try
            Send_Back()
        End Sub
        Public Sub NewInitialize()
            Console.WriteLine("Thread *Thread Receive* reinitialized")
            ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessages)
            ThreadReceive.Start()
        End Sub
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Listen()
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            'lbReceived.Items.Clear()
            Try
                ThreadReceive.Abort()
                receivingUdpClient.Close()
                'TextBox1.Text = "INFORMATION"
                TextBox1.Enabled = False
                Button2.Enabled = False
                Button1.Enabled = True
                'txtIP.Text = ""
                txtSocket.ReadOnly = False
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
    
        End Sub
        Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
            Try
                receivingUdpClient.Close()
            Catch ex As Exception
                Console.WriteLine(ex.Message)
            End Try
        End Sub
        Private Sub Listen()
            TextBox1.Text = ""
            lbReceived.Items.Clear()
            txtIP.Text = ""
            Try
                SocketNO = txtSocket.Text
                receivingUdpClient = New System.Net.Sockets.UdpClient(SocketNO)
                ThreadReceive = New System.Threading.Thread(AddressOf ReceiveMessages)
                ThreadReceive.Start()
                TextBox1.Enabled = True
                Button2.Enabled = True
                Button1.Enabled = False
                txtSocket.ReadOnly = True
            Catch x As Exception
                Console.WriteLine(x.Message)
                TextBox1.Text = TextBox1.Text & vbCrLf & x.Message
            End Try
        End Sub
        Private Sub Send_Back()
            Dim pRet As Integer
    
            Try
                GLOIP = IPAddress.Parse(txtIP.Text)
                GLOINTPORT = txtPort.Text
                udpClient.Connect(GLOIP, GLOINTPORT)
    
                'set up for 20 bytes to send back
                udpClient.Send(sendBytes, 20)
                Console.WriteLine("No of bytes send " & pRet)
    
                Dim BitDet As BitArray
    
                Dim tempStr As String
                Dim tempStr2 As String
                Dim i As Integer
                i = 0
                Dim j As Integer
                j = 0
                Dim line As Integer
                line = 0
    
                For j = 0 To BitDet.Length - 1
                    If BitDet(j) = True Then
                        Console.Write("1 ")
                        tempStr2 = tempStr
                        tempStr = " 1" + tempStr2
                    Else
                        Console.Write("0 ")
                        tempStr2 = tempStr
                        tempStr = " 0" + tempStr2
                    End If
                    i += 1
                    If i = 8 And j <= (BitDet.Length - 1) Then
                        line += 1
                        i = 0
                        'txtInfo.Text = txtInfo.Text + tempStr
                        tempStr = ""
                        tempStr2 = ""
                        'txtInfo.Text = txtInfo.Text + vbCrLf
                        If j <> (BitDet.Length - 1) Then
                            'txtInfo.Text = txtInfo.Text + line.ToString & ") "
                            Console.WriteLine()
                        End If
                    End If
                Next
            Catch ex As Exception
                Console.WriteLine(ex.Message)
                'txtInfo.Text = txtInfo.Text & vbCrLf & ex.Message
            End Try
    
        End Sub
        Public Sub Set_IP()
            'I didnt know a better way to decipher the ip and port it is coming from
            Dim o1 As Integer
            Dim p1 As Integer
    
            Dim o2 As Integer
            Dim p2 As Integer
    
            Dim o3 As Integer
            Dim p3 As Integer
    
            Dim o4 As Integer
            Dim hp As String
            Dim pt1 As Integer
            Dim pt2 As Integer
            Dim hplen As Integer
            Dim hport1 As String
            Dim hport2 As String
            Dim test As String
            Dim test2 As String
            Dim test3 As String
            Dim test4 As String
    
            p1 = InStr(txtIP.Text, ".") + 1
            p2 = InStr(p1, txtIP.Text, ".") + 1
            p3 = InStr(p2, txtIP.Text, ".") + 1
            test = Mid(txtIP.Text, 1, p1 - 1)
            o1 = Val(test)
            test2 = Mid(txtIP.Text, p1, p2 - p1)
            o2 = Val(test2)
            test3 = Mid(txtIP.Text, p2, p3 - p2)
            o3 = Val(test3)
            test4 = Mid(txtIP.Text, p3)
            o4 = Val(test4)
    
            'set the sendbuffer with the ip
            sendBytes(8) = o1
            sendBytes(9) = o2
            sendBytes(10) = o3
            sendBytes(11) = o4
    
            'convert the port to hex
            hp = Hex(txtPort.Text)
            hplen = Len(hp)
            If hplen = 3 Then
                hport1 = "&h" & Mid(hp, 1, 1)
                hport2 = "%h" & Mid(hp, 1, 2)
            Else
                hport1 = "&h" & Mid(hp, 1, 2)
                hport2 = "&h" & Mid(hp, 3)
            End If
    
            'set high and low bytes
            pt1 = Val(hport1)
            pt2 = Val(hport2)
    
            'set the sendbuffer with the port
            sendBytes(12) = pt1
            sendBytes(13) = pt2
    
        End Sub
    End Class

  3. #3
    I'm about to be a PowerPoster! Hack's Avatar
    Join Date
    Aug 2001
    Location
    Searching for mendhak
    Posts
    58,333

    Re: [RESOLVED] UDP Receive/Send

    Thanks for posting your solution.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width