2010-06-01 101 views
6

上午。在Java中的UDP廣播

我很新的Java和套接字連接,但我試圖發送UDP端口8001上的255.255.255.255的UDP數據包/廣播到設備。我可以將數據發送得很好,但是當接收數據時,連接超時。我有一個數據包嗅探器,我可以看到數據包發送,然後設備響應。

我敢肯定,這是一個菜鳥錯誤,我在代碼中遺漏了一些東西,但是我一直被困在它上面,任何幫助將不勝感激。

m_Socket = new DatagramSocket(m_SERVERPORT); 
InetAddress address = InetAddress.getByName(m_SERVERIP); 


m_DataPack = new DatagramPacket(m_SERVERCMD.getBytes(), m_SERVERCMD.getBytes().length, 
address, m_SERVERPORT); 
m_Socket.setBroadcast(true); 
m_Socket.connect(address, m_SERVERPORT); 

m_Socket.send(m_DataPack); 
m_DataPack = new DatagramPacket(data, data.length, 
address, m_SERVERPORT); 


m_Socket.receive(m_DataPack); // This is where it times out 


data = m_DataPack.getData(); 
String received = data.toString(); 
System.out.println("Received: " + received); 
m_Socket.close(); 

謝謝Gig'Em。

編輯:

我不知道如果這有助於但是當我看m_Socket對象,我可以看到下面的發送權之前:

bound = true; 
close = false; 
connectedAddress = Inet4Address (id = 32) (-1,-1,-1,-1); 
connectedPort = 8001; 
connectState = 1; 
created = true; 
impl = PlainDatagramSocketImpl; 
oldImpl = false; 

和m_DataPack對象如下:

address = Inet4Address (id = 32) (-1,-1,-1,-1); 
bufLength = 6 (size of packet I'm sending is 6 char long); 
offset = 0; 
port = 8001; 
+0

你確實意識到你的Gig'Em疏遠了美國較大CS計劃的畢業生,對吧? – jasonmp85 2010-06-02 04:29:14

+0

@ jasonmp85對於那些想知道它是什麼意思的非德克薩斯人來說:https://en.wikipedia.org/wiki/Traditions_of_Texas_A%26M_University#Gig_.27em(是的,我必須查看它;)) – Matthieu 2017-10-03 13:34:43

回答

1

如果你想獲得你需要bind()到本地端點的數據報(地址+端口)。

+0

在綁定函數我需要通過SocketAddress將本地端點設置爲地址和端口。做這個的最好方式是什麼? 我知道在DatagramPacket類中有一個getSocketAddress();功能,所以不能幫助我。 – user355528 2010-06-01 15:05:13

+0

我嘗試過m_DataPack = new DatagramPacket(data,data.length, InetAddress.getLocalHost(),m_SERVERPORT);然後m_Socket.bind(m_DataPack.getSocketAddress());但它會拋出一個異常說明套接字已被綁定。 – user355528 2010-06-01 15:06:45

+0

他綁定,這是新的DatagramSocket(int端口)。 – EJP 2010-06-02 03:54:40

10

這沒有意義。您正在廣播,這是一對多的,而且您也正在連接,這是一對一的。這是什麼?

失去連接。並失去255.255.255.255。這已經被大量廢棄了大約20年。使用子網本地廣播地址,例如192.168.1.255。