這一篇我來寫一下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函數建立的套接字
參數二包含了所要連接的服務端的地址和端口