Anhören einer UDP Broadcast mit Gewinden
Frage
Ich sende eine einfache Nachricht an . . *. 255 (Wechsel zu 255 den letzten Teil meiner ip) und ich versuche, sie zu hören. der Code gibt keinen Fehler, aber ich empfange nichts. In wireshark kann ich sehen, die broacast korrekt gesendet werden, aber mit einem anderen Port jedes Mal (ich weiß nicht, ob das eine große Sache). Hier einige Teile meines Codes.
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
Lösung
dieser Artikel fast genau zu sein scheint zu tun, was Sie‘ re versuchen, es ziemlich gut mit vielen Kommentaren im Code zu tun und erklärt.
Andere Tipps
So hören Sie ein UDP-Port den Port binden müssen. Hier ist einig c # -Code, die ich benutze. Es verwendet einen Thread, fragt die Buchse für die Nachrichten empfangen.
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);
Da ist in meinem erhalten Faden
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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow