,如实验图12所示。
图12TCP连接的释放过程
32客户服务器模型
在客户服务器模型中,多个相互通信的计算机都作为客户端,与网络服务器
进行连接,并通过服务器进行信息的传递。所以多个客户端之间的通信就变为了
客户端与服务端的通信。所以,采用客户服务器模型进行网络聊天需要分别编写
服务器端和客户端的程序,服务器和客户端之间相互通信的同步关系和各自的程
序流程如实验图13所示。
Tcp服务器
Socket
Tcp客户端
Socket
建立连接
Bi
dListe
Co
ectWrite
请求数据
Accept
阻塞直到有客户端连接
Read
ReadClose
回应数据结束连接
处理请求
WriteRead
Close
图13Socket通信流程图
f33网络套接字(socket)的概念
Socket接口上TCPIP网络应用程序接口(API),它提供了许多函数和例程,程序员可以使用它们来开发TCPIP网络应用程序。
使用Socket接口进行网络通信的过程如图13所示,简要步骤如下:1建立一个Socket2按要求配置socket,将socket连接到远程主机或给socket指定以各本地协议端口。3按要求通过socket发送和接受数据。4关闭此socket。这是通过Socket实现点对点通信需要掌握的4个编程要点。
34多线程的概念
上述点对点通信的实现知识完成了主机进程与服务器进程之间的连接,建立连接的进程之间是一对一的联系,即主机的一个进程与服务器的一个进程之间建立的连接。而每个进程进行通信的环节都包括了发送信息和接口信息两个任务,这两个任务通过一个端口地址发送和接收。
对于多个并发的任务需要创建多个线程或线程去实现。使用一个进程去完成发送信息是没有问题的,因为发送总是主动的;而使用同一个进程再去完成接受信息去不一定会成功,因为接受信息是被动的,所以当没有信息可以接收时,该进程就会被阻塞,从而导致发送任务也一起被阻塞。同一个端口的发送和接收是两个并发任务,应该由两个不同的任务去分别完成信息的发送和接收。这样,当接收信息任务因没有信息而被阻塞时,不至于影响发送任务的执行。
那么,发送和接收两个任务是使用两个进程还是两个进程去完成呢?在网络通信中,端口地址是以进程为单位进程分配的,而一个进程与外界的消息发送与接收必须通过分配给它的同一个端口进行。因此,不能通过创建进程方式来解决上诉问题,因为两个进程会分别对应两个不同的端口,而发送和接收必须使用同一端口。线程不是资源分配的单位,所以如果使用两个线程不会对线程分配新的端口。因此,本实验需要使用两个线程去分r