الاستماع إلى البث UDP مع المواضيع
سؤال
وأنا بث رسالة بسيطة إلى <م>. م>. *. 255 (تغيير إلى 255 الجزء الأخير من بلدي الملكية الفكرية) وأنا أحاول الاستماع إليها. رمز إرجاع أية خطأ ولكن أنا لا يتلقون أي شيء. في يريشارك أستطيع أن أرى يتم إرسال broacast بشكل صحيح، ولكن مع منفذ مختلف في كل مرة (أنا لا أعرف إذا كان هذا هو صفقة كبيرة). وفيما يلي بعض أجزاء من قانون بلدي.
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
المحلول
هذه المقالة يبدو أن يفعل بالضبط تقريبا ما ' إعادة تحاول القيام به، ويفسر ذلك بشكل جيد جدا مع الكثير من التعليقات في التعليمات البرمجية.
نصائح أخرى
ليستمع إلى منفذ UDP يجب ربط الميناء. وفيما يلي بعض ج # التعليمات البرمجية التي أستخدمها. ذلك باستخدام تلقي موضوع أن استطلاعات مقبس للرسائل.
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);
وبعد ذلك في بلدي تلقي موضوع
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
لا تنتمي إلى StackOverflow