我有下面的代碼來等待和監聽從服務器發送的 UDP 廣播。但是在 socket.recieve(packet) 它等待并且 UDP 資料包永遠不會到達。它肯定是從服務器發送的。單步執行代碼一切似乎都是正確的,我哪里出錯了?
public class BroadcastListenerService extends Service {
static String UDP_BROADCAST = "UDPBroadcast";
DatagramSocket socket;
private void listenAndWait(Integer port) throws Exception {
byte[] recvBuf = new byte[1000];
if (socket == null || socket.isClosed()) {
socket = new DatagramSocket(port); // Can receive broadcasts
socket.setBroadcast(true);
socket.setReuseAddress(true);
Logger.doLog(LogDetail.Debug,"Broadcast? " socket.getBroadcast());
Logger.doLog(LogDetail.Debug,"ReuseAddr: " socket.getReuseAddress());
Logger.doLog(LogDetail.Debug,"Local Addr: " socket.getLocalAddress().toString());
Logger.doLog(LogDetail.Debug,"Local Port: " socket.getLocalPort());
}
DatagramPacket packet = new DatagramPacket(recvBuf, recvBuf.length);
socket.receive(packet);
一個潛在的問題是套接字無法訪問本地 INetaddress?socket.getLocalAddress 的回傳值為:::/::
服務器端的代碼發送UDP廣播如下:
Public Sub SendBroadcast(port As Integer, msg As String)
Try
Dim sock As New Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1)
Dim addr As IPAddress = bcAddress
Dim buff As Byte() = Encoding.ASCII.GetBytes(msg)
Dim ep As New IPEndPoint(addr, port)
sock.SendTo(buff, ep)
Catch ex As Exception
Debug.WriteLine("Exception sending broadcast: " & ex.ToString)
End Try
End Sub
所有變數值似乎都包含我希望看到的資訊、正確的埠號、地址等。
uj5u.com熱心網友回復:
看來問題與本地網路有關。一旦網路發生變化,UDP 資料包就開始通過。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/517182.html
標籤:插座UDP数据报
