基本套接字分為客戶機/服務器和點對點模式。
C/S:sever/client---------------------------一般采用TCP
B/S:browser/server-----------------------一般采用UDP
常用的數據結構 有in_addr(存儲IP地址),sockaddr_in(表示Internet協議地址結構),sockaddr(存儲主機IP地址和接口信息)。
struct in_addr{ union{ struct {u_char, s_b1, s_b2, s_b3, s_b4} s_un_b; struct {u_short s_w1, s_s2;} s_un_w; u_long s_addr; } s_un;
}
struct sockaddr_in{ short sin_family; // AF_INET u_short sin_port; // 16位端口號 struct in_addr sin_addr; // 32位IP地址 char sin_zero[ 8 ]; };
struct sockaddr{ unsigned short sa_family; char sa_data[ 14 ]; };
例子:
in_addr test; test..s_un_b.s_b1 = 192 ; test..s_un_b.s_b2 = 168 ; test..s_un_b.s_b3 = 0 ; test..s_un_b.s_b4 = 1 ;
struct sockaddr_in serverAddr; memst( &serverAddr, 0 , sizeof ( struct sockaddr_in)); serverAddr.sin_family =AF_INET; // AF_INET表示TCP serverAddr.sin_port=htons( 80 ); serverAddr.sin_addr.s_addr =htonl(INADDR_ANY); // INADDR_ANY表示當前所用的IP
常用函數
#incldue<sys/socket.h> // 創建套接字 SOCKET PASCAL FAR socket( int af, int type, int protocol) // af指定通信協議--AF_UNIX,AF_INET,AF_NS // type指定套接字類型,SOCK_STREAM(TCP),SOCK_DGRAM(UDP),SOCK_RAM(原始套接字) // protocol指定特定協議 // 套接字綁定 int PASCAL FAR bind(SOCKET s, const struct sockaddr FAR *name, int namelen) // s指定要關聯的套接字 // name指定要綁定的IP地址與端口信息 // 偵聽 int PASCAL FAR listen(SOCKET s, int backlog) // backlog指定請求連接隊列的最大長度,一般設為5 // 偵聽,接受數據 SOCKET PASCAL FAR accept(SOCKET s, struct sockaddr FAR* addr, int FAR* addrlen) // s為當前指定的套接字 // addr為保存當前客戶端的地址信息 // 創建連接 int PASCAL FAR connect(SOCKET s, const struct sockaddr FAR* name, int namelen) // TCP發送數據 int PASACAL FAR send(SOCKET s, const char FAR* buf, int len, int flags); // s指定已經連接的套接字 // buf表示待發送數據的緩沖區 // flags用于設定發送控制參數,一般為0 // TCP接受數據 int PASACAL FAR recv(SOCKAET s, char FAR* buf, int len, int flags); // UDP發送數據 ssize_t sendto( int sockfd, const void *buf, size_t len, int flags, const struct sockaddr * to, socklen_t tolen) ssize_t recvform( int sockfd, const void *buf, size_t len, int flags, const struct sockaddr * from , socklen_t fromlen) // sockfd表示已經創建好的一個UDP套接字 // to.from用于設置接受方和發送方的地址信息 // tolen,fromlen用于設置地址信息的長度
例子:
TCP:
?
UDP:
?
?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
