c++ 網絡程式設計
标簽(空格分隔): c++
目錄
-
- 建立socket
- 綁定socket
- 建立連接配接
- 監聽
- 伺服器端接收
- 資料發送和接收
- 面向連接配接的資料發送
- 面向連接配接的資料接收
- 無連接配接的資料發送
- 無連接配接的資料接收
- 關閉socket
int socket(int domain,int type ,int protocol);
- domain 通常為PF_INET,表示網際網路協定(TCP/IP)
- type 指定了Socket的類型 SOCK_STREAM(TCP),SOCK_DGRAM(UDP)
- protocol 通常指派為0
int bind(int scokfd,struct sockaddr *MyAddr,int AddrLen);
- scokfd Socket()函數傳回的Socket套接字
- MyAddrr 指向含有本機IP位址及端口号的sockaddr類型的指針
- sockaddr
struct sockaddr{ unsigned short as_family;//位址族,AF_xxx char sa_data[14]; //14位元組的協定位址 }
* **sa_family** 一般為*AF_INET*,代表TCP/IP * **sa_data** 包含socket的IP位址和端口号
- sockaddr_in 這個結構更加通用,與socketaddr結構體類似,且他們的指針可以互相替代
struct sockaddr_in{ short int sin_family;//位址族 unsignedshort int sin_port;//端口号 struct in_addr sin_addr;//IP位址 unsigned char sin_zero[8];//填充0,以與 struct sockaddr大小保持一緻 }
* **sin_family** 必須設定為*AF_INET* * **sin_port** 端口号 * **sin_addr** 一個unsigned long的IP位址 * **sin)zero** 填充0,用于與sockaddr大小保持一緻
注意sin_port和sin_addr需要轉換成網絡位元組優先順序
面向連接配接的用戶端程式可以使用Connect函數來配置Socket,進而與遠端伺服器建立一個TCP連接配接,其函數原型為:
int connect(int sockfd, stuct sockaddr *serv_addr ,int addrlen);
- sockfd socket()函數傳回的socket套接字
- serv_addr 包含遠端主機的IP位址和端口号的指針
- addrlen 遠端位址結構的長度
- 當連接配接失敗時,傳回-1,并且設定錯誤資訊
伺服器端程式調用listern()函數使得socket處于一個别動監聽的模式,并且為這個socket建立一個輸入資料隊列,将到達伺服器的請求儲存到此隊列中,直到程式處理。
int listen(int sockfd, int backlog);
- sockfd 調用socket()函數傳回的socket套接字
- backlog 指定在請求隊列中允許的最大請求數
- 緩存隊列中的請求,等待accept處理
建立好緩存隊列後,伺服器端程式可以調用accept()函數處理客戶的連接配接請求。
int accept(int sockfd, void *addr, int *addrlen);
- sockfd 被監聽的socket套接字
- addr 通常是一個指向sockaddr_in變量的指針,該變量用于存儲提出連接配接請求的主機資訊
- addrlen 通常是一個指向值為
的整型指針變量sizeof(struct sockaddr_in)
int send(int sockfd, const void *msg, int len, int flags);
- sockfd 監聽的套接字
- msg 指向要發送的資料
- len 以位元組為機關的資料長度
- flags 一般設定為0
- 傳回值為實際發送出去的位元組數
int recv(int sockfd, void *buf, int len, int flags);
- buf 存放接收資料的緩沖區
- 傳回值為實際接收到的資料
int sendto(int sockfd, const void msg, int len, int flags, const struct sockaddr to, int tolen);
這個函數比send()函數多了兩個參數
- to 要發送資料到的目的主機的IP位址和端口号資訊
- tolen 通常别指派為
sizeof(struct sockaddr)
- from 是一個struct sockaddr類型的變量,儲存資料來源主機的IP位址和端口号
- fromlen 一般設定為
sizeof(stuct sockaddr)
-
- 0:不允許繼續接收資料
- 1:不允許接續發送資料
- 2:不允許繼續發送和接收資料