connect函數的用法
時間:2017-01-04作者:華清遠見
在網絡編程中,connect函數經常用來在套接字上初始化連接。無論是流式套接字還是數據報套接字都可以使用connect函數,但含義卻不一樣。下面我們分別來討論一下: 一、 流式套接字 流式套接字通常使用的是面向連接的協議,如TCP協議。該類型套接字在雙方通信之前要先建立連接。具體說就是服務器端創建監聽套接字并綁定地址,客戶端調用connect函數建立連接。該函數原型如下: int connect(int sockfd, const struct sockaddr &serv_addr, socklen_t addr_len); sockfd是客戶端創建的流式套接字;serv_addr指向存放服務器地址信息的結構體;addr_len是該結構體的長度。 實際上,我們通過抓包分析可以得知:客戶端和服務器端通過如下三次握手后即建立好了連接。
SYN
一旦建立好連接,客戶端就可以通過該套接字和服務器端通信了。需要注意的是:因為是建立好了連接,所以使用send/recv發送/接收數據,無需指定對方 二、 數據報套接字 數據報套接字通常使用的是無連接的協議。該類套接字在雙方通信之前不用先建立連接,可以直接使用sendto/recvfrom收發數據。但在發送數據時必須指定對方的地址;在接收數據時通常也需要保存對方的地址。 看到這里大家應該發現了流式套接字和數據報套接字的一個區別:前者只能和一方通信;后者可以和多方通信。 數據報套接字同樣可以使用connect函數,但含義并不是建立連接而是限定該套接字只和指定的一方通信。即未使用connect之前,可以和任意的地址通信;而connect之后只能和一方通信。 一旦connect之后,數據報套接字也可以使用send/recv收發數據了。如果想和其他的地址通信的話,可以重新connect指定新的地址。
相關資訊
發表評論
|