1.面向连接的通信
在IP中,面向连接的通信时通过TCP/IP协议来实现的。应用程序在使用TCP通信时,需要建立一个虚拟连接。其模型如下:
服务器端
一旦为协议创建了套接字,就要将套接字绑定到一个已知地址上,用bind函数来实现。其定义如下:
int bind(
SOCKET s,
const struct sockaddr FAR *name,
int namelen
);
- s:为要连接的套接字。
- name:其为类型为struct sockaddr。对于TCP协议要用结构体SOCKADDR_IN,要将该结构体转换为该类型。
- namelen:表示要传递的、由协议决定的地址结构的长度,即第二个参数的长度。
当将套接字绑定后,就是将套接字置于监听状态,函数为listen。其定义如下:
int listen(
SOCKET s,
int backlog
);
- s:其为绑定的套接字。
- backlog:表示等待连接队列的最大长度。当服务器接受了一个连接,就将该连接请求从该队列中删除;当连接请求超过队列长度,就会发回WSAECONNREFUSED错误。
为了接受连接请求,要使用函数accept、WSAAccept或AcceptEx来实现。其中accept函数定义如下:
SOCKET accept(
SOCKET s,
struct sockaddr FAR* addr,
int FAR* addrlen
);
- s:为绑定的套接字。
- addr:为TCP应该是一个有效的SOCKADDR_IN的地址,如果是其他协议就应该是相应的SOCKADDR结构。
- addr:为SOCKADDR_IN结构体的长度。
- 返回值:其返回一个新的套接字描述符,其后与客服端的所有操作都应该使用该新的套接字。
通过accept函数,可以讲等待连接队列的第一个请求提供服务。accept返回后,addr会被相应的对方的IP4信息填充。
客户端
客户端创建需要下面3个步骤:
- 1)创建一个套接字。
- 2)建