基本套接字分为客户机/服务器和点对点模式。
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:

