在udp中使用connect

2021-05-08 19:35:05 字數 599 閱讀 4912

近日一直在學習《unix網路程式設計 第1卷:套介面api》,再次重新認識了udp,糾正了不少以前錯誤的認識和觀念。

在udp中使用connect:

1. 不能給輸出操作指定伺服器ip位址埠號,也就是說不能使用sendto而改用write或send。伺服器ip由connect指定。

2. 接收操作不必使用recvfrom以獲取資料報,而改用read、recv或recvmsg。

3. 已連線udp套介面引發的非同步錯誤返回給他們所在的程序。

第3點這才是使用connect的關鍵, 在未連線的upd客戶端使用recvfrom獲取資料時,核心會睡眠該執行緒,如果在呼叫recvfrom之前伺服器就已經崩潰或其它異常

執行緒將永遠睡眠下去。為了解決這個問題那就使用connect吧。

還有乙個原因也可以有理由使用connect, 在乙個未連線的udp上給兩個資料報呼叫sendto函式核心執行下列步驟:

1.連線套介面

2.輸出第乙個資料報

3.斷開套介面

4.連線套介面

5.輸出第二個資料報

6.斷開套介面

1.連線套介面

2.輸出第乙個資料報

3.輸出第二個資料報

怎麼在qt中使用connect指令來寫socket

如何在qt中使用connect指令來寫socket?如何在qt中使用connect指令來寫socket?我想用connect指令來設計socket 但是 qt 自動把 connect 當成傳遞訊號了 也就是qobject裡面的connect了 請問我怎樣才能用 connect 鏈結伺服器呢?解決方案...

在ROS中使用UDP進行通訊

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

UDP呼叫connect 的作用

我們都知道,udp是無連線的,但是為什麼協議讓udp也可以呼叫connect 1.因為udp可以是一對一,多對一,一對多,或者多對多的通訊,所以每次呼叫sendto recvfrom 時都必須指定目標ip和埠號。通過呼叫connect 建立乙個端到端的連線,就可以和tcp一樣使用send recv ...