最最基本的socket編程基礎(c++) 二

這一篇我來寫一下socket編程裏面比較基本的函數

SOCKET socket(int af,int type,int protocl);

第二個參數指定socket類型 SOCKE_STREAM產生流式套接字,SOCK_DGRAM產生數據報套接字
函數調用失敗返回INVALID_SOCKET

我有一個疑問就是如果客戶端和服務端的socket類型不同還可不可以進行通訊,這個我過段時間試驗一下,先馬克
 

bind(SOCKET s,const struct sockaddr *name,int namelen);

第一個參數當然是待綁定的套接字啦,
第二個參數是標識綁定在哪個“地方”(sockaddr_in),服務端那個裏面ip是全0,我覺着可能是指能接受那些ip發送的數據?
第三個參數是這個“地方”的佔地大小。
這個客戶端一般是不用綁定的,使用的時候直接分配端口就好,但是服務端是需要綁定的,要不是不知道究竟訪問那個端口服務端才能收到

int WSAAPI listen(SOCKET s,int backlog);

設置socket的狀態爲監聽,使客戶端程序可以進行連接
參數 backlog指定最大的連接數

SOCKET WSAAPI accept(SOCKET s,struct sockaddr *addr,int *addrlen);

參數一是正在監聽的socket,參數二在執行之後會包含客戶端的端口ip等(sockaddr_in)
返回值是一個新的套接字描述符,他代表的是和客戶端新的連接
在沒有連接之前進程處於阻塞狀態

int WSAAPI recv(SOCKET s,char *buf,int len,int flags);
int WSAAPI send(SOCKET s,const char *buf,int len,int flags);

這兩個socket是建立連接後生成的那個socket,注意第二個參數是char數組而不是string

int WSAAPI connect(SOCKET s,const struct sockaddr *name,int namelen);

參數一是socket函數建立的套接字
參數二包含了所要連接的服務端的地址和端口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章