|
-
Dec 7th, 2007, 09:16 PM
#1
Thread Starter
New Member
[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
-
Dec 12th, 2007, 10:21 PM
#2
Thread Starter
New Member
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
-
Dec 13th, 2007, 07:55 AM
#3
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
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|