Windows网络编程(二)

Windows Sockets的实现

Windows SocketsMicrosoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,以动态链接库的形式提供给我们使用。

1. 套接字的类型

n 流式套接字(SOCK_STREAM)

提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。流式套接字实际上是基于TCP协议实现的。

n 数据报式套接字(SOCK_DGRAM)

提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。数据报式套接字实际上是基于UDP协议实现的。

n 原始套接字(SOCK_RAW)

2. 基于TCPsocket编程

基于TCPsocket编程的服务器程序流程如下:

1) 创建套接字(socket);

2) 将套接字绑定到一个本地地址和端口上(bind);

3) 将套接字设为监听模式,准备接收客户请求(listen);

4) 等待客户请求到来,当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept);

5) 用返回的套接字和客户端进行通信(send/recv);

6) 返回,等待另一客户请求;

7) 关闭套接字。

基于TCPsocket编程的客户端程序流程如下:

1) 创建套接字(socket);

2) 向服务器发出连接的请求(connect);

3) 和服务器端进行通信(send/recv);

4) 关闭套接字。

在服务器端,当调用accept函数时,程序就会等待,等待客户端调用connect函数发出连接请求,然后服务器接受该请求,于是双方就建立了连接。之后,服务器和客户端就可以用sendrecv函数进行通信了。

3. 基于UDPsocket编程

服务器端也叫接收端,对于基于UDP的套接字编程来说,它的服务器端和客户端这种概念不是很强化,我们也可以把服务器端,即先启动的一端称为接收端,发送数据的一端称为发送端,也成为客户端。

先看一下接收端程序的编写:

1) 创建套接字(socket);

2) 将套接字绑定到一个本地地址和端口上(bind);

3) 等待接收数据(recvfrom);

4) 关闭套接字。

客户端程序的编写:

1) 创建套接字(socket);

2) 向服务器发送数据(sendto);

3) 关闭套接字。

注意,在基于UDP的套接字编程时,利用的是sendtorecvfrom这两个函数实现数据的发送和接收,而基于TCP的套接字编程时,发送数据时调用send函数,接收数据调用recv函数。

你可能感兴趣的:(Windows网络编程(二))