Listening to UDP Broadcast with Streams

I am broadcasting a simple message .. *. 255 (changing to 255 the last part of my ip), and I'm trying to listen to it. the code does not return an error, but I get nothing. In wirehark, I see that broacast is sent correctly, but with a different port every time (I don't know if this is a big deal). Here are some parts of my code.

Private Sub connect() setip() btnsend.Enabled = True btndisconnect.Enabled = True btnconnect.Enabled = False receive() txtmsg.Enabled = True End Sub Sub receive() Try SocketNO = port rClient = New System.Net.Sockets.UdpClient(SocketNO) rClient.EnableBroadcast = True ThreadReceive = _ New System.Threading.Thread(AddressOf receivemessages) If ThreadReceive.IsAlive = False Then ThreadReceive.Start() Else ThreadReceive.Resume() End If Catch ex As Exception MsgBox("Error") End Try End Sub Sub receivemessages() Dim receiveBytes As Byte() = rClient.Receive(rip) Dim BitDet As BitArray BitDet = New BitArray(receiveBytes) Dim strReturnData As String = _ System.Text.Encoding.Unicode.GetString(receiveBytes) MsgBox(strReturnData.ToString) End Sub Private Sub setip() hostname = System.Net.Dns.GetHostName myip = IPAddress.Parse(System.Net.Dns.GetHostEntry(hostname).AddressList(1).ToString) ipsplit = myip.ToString.Split(".".ToCharArray()) ipsplit(3) = 255 broadcastip = IPAddress.Parse(ipsplit(0) & "." & ipsplit(1) & "." + ipsplit(2) + "." + ipsplit(3)) iep = New IPEndPoint(broadcastip, port) End Sub Sub sendmsg() Dim msg As Byte() MsgBox(myip.ToString) sclient = New UdpClient sclient.EnableBroadcast = True msg = Encoding.ASCII.GetBytes(txtmsg.Text) sclient.Send(msg, msg.Length, iep) sclient.Close() txtmsg.Clear() End Sub 
+4
source share
2 answers

This article seems to do almost what you are trying to do, and explains it pretty well with a lot of comments in the code.

+3
source

To listen on a UDP port, you must bind a port. Here is the C # code I'm using. It uses a receive stream that polls the socket for messages.

 Socket soUdp_msg = new Socket(AddressFamily.InterNetwork, SocketType.Dgram,ProtocolType.Udp); IPEndPoint localIpEndPoint_msg = new IPEndPoint(IPAddress.Any, UdpPort_msg); soUdp_msg.Bind(localIpEndPoint_msg); 

Then in my receive stream

  byte[] received_s = new byte[2048]; IPEndPoint tmpIpEndPoint = new IPEndPoint(IPAddress.Any, UdpPort_msg); EndPoint remoteEP = (tmpIpEndPoint); while (soUdp_msg.Poll(0, SelectMode.SelectRead)) { int sz = soUdp_msg.ReceiveFrom(received_s, ref remoteEP); tep = (IPEndPoint)remoteEP; // do some work } Thread.Sleep(50); // sleep so receive thread does not dominate computer 
+1
source

All Articles