TCP UDP的一些收發介面的特殊用法

2021-09-20 20:27:19 字數 1216 閱讀 3139

1.udp使用connect函式和不使用connect函式的區別

* 不能再使用sendto/recvfrom,而只能使用write/read或send/recv,也就是說不能在收發資料時才指定目的ip

* 已連線的udp引發的非同步錯誤會返回給所在的程序,而未連線的udp不會接收非同步錯誤

* 已連線的udp具有較高的收發效率。因為未連線的udp在收發資料時,需要先執行連線過程,資料收發完成後,再解除連線

* udp可以多次呼叫connect,目的:指定新的ip位址和埠或者也可以是斷開連線

2.關於recvfrom/sendto,read/write,recv/send,accept,connect等所有阻塞埠的超時控制的3種方法

* select 超時退出select.io不僅可以使用select來驅動,還可以使用訊號sigio來驅動(非同步io),當io上發生任何事件時,將會發出該訊號

* alarm  超時將接收到sigalrm訊號,同時當前的阻塞埠返回errno==eintr錯誤

* setsockopt 設定socket選項:so_rcvtimeo/so_sndtimeo 

非阻塞的設定:

int val=fcntl(fd,f_getfl,0);

fcntl(fd,f_setfl,val|o_nonblock);

3.關於recvfrom/sendto,read/write,recv/send讀寫介面的引數flags標誌

* 0  沒有任何特殊意義

* msg_dontroute  收發資料時,無需執行路由查詢,告知路由就在區域網之內

* msg_dontwait   僅本次執行非阻塞收發操作

* msg_oob        指明收發帶外資料,tcp連線上只有乙個位元組可以作為帶外資料傳送

* msg_peek       只對收資料有用,檢視快取中已經可讀的資料的多少

* msg_waitall    只對收資料有用,讀取到指定數目的資料才返回000

4.聚合與分散 readv/writev函式:可以對任何檔案描述符進行操作

#include

size_t readv(int fd,const struct iovec *iov,int iovcnt);

size_t writev(int fd,const struct iovec *iov,int iovcnt);  //若成功則返回讀入和寫出的位元組數,失敗返回-1

struct iovec

Tcp Udp的一些知識

tcp tcp transmission control protocol,傳輸控制協議,速度慢,安全 提供的是面向連線,可靠的位元組流服務。客戶端和伺服器建立tcp連線進行資料交換。還提供了超時重發,丟棄重複資料,檢驗資料,流量控制等功能,保證資料能從一端傳到另一端。tcp分為了 客戶端 和 伺服...

除錯介面的一些方法

什麼事情都是有乙個順序的,除錯也一樣,遵循一定的步驟就可以進行錯誤的逐一排查。方法二 看執行的程式裡面是否出現timeout這種錯誤。方法三 直接把訪問的ulr複製到瀏覽器裡面執行,看看結果。分為 get和post命令 get命令 方法一 通過瀏覽器來除錯這乙個介面 非常好 方法二 通過debug來...

關於介面的一些思考

下面示例是模擬遊戲 憤怒的小鳥 的實現。叫的方式的介面 public inte ce shouttype 嗷嗷叫 public class aoshout implements shouttype 喳喳叫 public class zhashout implements shouttype 鳥的抽象...