基本套接字分為客戶機/服務器和點對點模式。
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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

