Jav中使用UDP通訊時繫結埠

2021-07-31 04:45:42 字數 1762 閱讀 4975

在socket以udp方式進行通訊時,客戶端的socket每次傳送資訊時的埠是隨機不固定的。這樣的話伺服器每次收到客戶端的資訊進行響應時,必須先從接受的資料報中獲取客戶端的位址和埠。於是就想能不能把客戶端的埠繫結乙個固定的值,首先想到的就是在jdk文件中查詢,結果當然是可以的。

1. 先來看看不繫結情況下的**:

--伺服器**:

public class socketreceiver  catch (exception e) 

}}

--客戶端**:

從伺服器端可以看出,客戶的每次傳送訊息時的埠是隨機變化的。

2. 從jdk文件查到,客戶端可以使用bind()方法將傳送訊息的埠進行繫結,喜出望外,也不多想,直接在**裡操作,修改後的客戶端**如下:

// 建立socket

datagramsocket socketsender = new datagramsocket();

inetsocketaddress addr = new inetsocketaddress(address, 45671);

socketsender.bind(addr);

就是在建立socket後呼叫bind()方法,但是結果卻不是想象的美好,執行後的結果如下圖:

3. 按理說是jdk文件裡面介紹的方法,應該沒有錯啊,但是執行了好幾次都是同樣的結果,無奈之下去網上查資料,終於在維基百科上找到了答案,如下圖:

意思就是在建立socket物件的時候要傳入乙個null引數,這樣就沒有問題了,繼續修改**:

// 建立socket

datagramsocket socketsender = new datagramsocket(null);

inetsocketaddress addr = new inetsocketaddress(address, 45671);

socketsender.bind(addr);

然後執行的結果是:

ok,終於完成了,寫到這裡,我突然意識到,udp方式下,使用socket通訊時,socket在建立例項的時候就應該繫結了乙個隨機的埠吧,當然,確定是什麼樣的還有待驗證。

在ROS中使用UDP進行通訊

原鏈結 ros的網路通訊提供了兩種方式,一種是tcp協議,一種是udp協議。預設採用tcp進行通訊。但是在實際的wifi網路使用中發現使用者經常反饋客戶端和機械人連線中斷且無法重新建立連線。在ros wiki中官方也有說明,rostcp更適合有線網連線的網路,而rosudp更適合wifi等網路不可靠...

C 中使用UDP通訊例項

網路通訊協議中的udp通訊是無連線通訊,客戶端在傳送資料前無需與伺服器端建立連線,即使伺服器端不 也可以傳送,但是不能保證伺服器端可以www.cppcns.com收到資料。本文例項即為基於c 實現的udp通訊。具體功能 如下 伺服器端 如下 static void main string args ...

iview中使用tree選框繫結值時遇到的坑

tree外掛程式的選框狀態下有方法 on check change handlecheckchange 在樹形圖中設定v if v if sitedata data data3 on check change handlecheckchange show checkbox style margin ...