socket 程式設計
linux下tcp通訊
方法一、fcntl 函式可以將乙個socket 控制代碼設定成非阻塞模式,設定之後每次的對於sockfd 的操作都是非阻塞的。
flags = fcntl(sockfd, f_getfl, 0); //獲取檔案的flags值。
fcntl(sockfd, f_setfl, flags | o_nonblock); //
設定成非阻塞模式;
flags = fcntl(sockfd,f_getfl,0
);fcntl(sockfd,f_setfl,flags&~o_nunblock); //
設定成阻塞模式;
方法二、recv, send 函式的最後有乙個flag 引數可以設定成msg_dontwait
臨時將sockfd 設定為非阻塞模式,而無論原有是阻塞還是非阻塞。
recv(sockfd, buff, buff_size,msg_dontwait); //非阻塞模式的訊息傳送
send(scokfd, buff, buff_size, msg_dontwait); //
非阻塞模式的訊息接受
注意:linux中send函式msg_nosignal異常訊息
linux 下當連線斷開,還傳送資料的時候,不僅 send() 的返回值會有反映,而且還會向系統傳送乙個異常訊息,如果不作處理,系統會出 brokepipe,程式會退
出,這對於伺服器提供穩定的服務將造成巨大的災難。為此,send() 函式的最後乙個引數可以設定為 msg_nosignal,禁止 send() 函式向系統傳送常訊息。
#include int socket(int family, int type, int protocol); //指定期望的通訊協議型別,
返回的檔案描述符和套接字描述符類似,我們成為套接字描述符,簡稱sockfd
af_inet ipv4協議 sock_stream(常用) 位元組流套接字 protocol:協議型別的常量或設定為0,以選擇給定的family和type組合的系統預設值
#includeint inet_pton(int family,constchar *strptr,void *addrptr);//
成功返回1,格式不對返回0,出錯返回-1
作用:p代表表示式 n代表數值 以後所寫的所有**中都有可能會需要這個函式,所以這個函式很重要
將char所指向的字串,通過addrptr指標存放
需要注意的是:當他發生錯誤的時候,errno的值會被置為eafnosupport
#include int connect(int sockfd,conststruct sockaddr* servaddr,socklen_t addrlen);//
用connect函式來建立與tcp伺服器的連線
#include
int close(int sockfd);//
關閉socket,並終止tcp連線
#include
int bind(int sockfd,const
struct* myaddr,socklen_t addrlen);//
把本地協議位址賦予乙個套接字。
//也就是將32位的ipv4或128位ipv6與16位的tcp或者udp組合
#include
int listen(int sockfd,int backlog)//
成功返回0,失敗返回-1 listen函式僅由tcp伺服器呼叫
listen函式將會做兩件事:
1:我們在建立套接字的時候使用了socket函式,它建立的套接字是主動套接字,bind函式的功能就是通過這個將主動套接字,變成被動套接字,
告訴核心應該接受指向這個套接字的請求,closed狀態變成listen狀態。
2:本函式的第二個引數規定了核心要為該套接字排隊的最大連線個數。
#include int accept(int sockfd,struct sockaddr* cliaddr,socklen_t *addrlen);//成功返回描述符,失敗返回-1
1、如果第二三個引數為空,代表了,我們對客戶的身份不感興趣,因此置為null;
2、第乙個引數為socket建立的監聽套接字,返回的是已連線套接字,兩個套接字是有區別的,而且非常重要。區別:我們所建立的監聽套接字
一般伺服器只建立乙個,並且一直存在。
而核心會為每乙個伺服器程序的客戶連線建立乙個連線套接字,當伺服器完成對某個給定客戶的服務時,連線套接字就會被關閉。
socket程式設計
一直以為serversocket accept之後客戶端才能發資訊,實驗後得出如下結論 1 serversocket沒有accept時,client是可以傳送資訊到server端的。2 serversocket accept之後,正在處理訊息時,client也是可以傳送資訊到server端。如果se...
Socket程式設計
對tcp ip udp socket程式設計這些詞你不會很陌生吧?隨著網路技術的發展,這些詞充斥著我們的耳朵。那麼我想問 1.什麼是tcp ip udp?2.socket在 呢?3.socket是什麼呢?4.你會使用它們嗎?什麼是tcp ip udp?tcp ip transmission cont...
socket程式設計
建立socket 建立乙個 socket,它可用於在基於 tcp ip 的網路 如 internet 上通訊。socket s new socket addressfamily.internetwork,sockettype.stream,protocoltype.tcp 若要使用 udp 而不是 ...