Section I Problem Specification
实验要求:
本次实验是实现一个简单的C/S模型,是基于客户端和服务端的网络编程。服务端的程序启动后,会在在某端口监听来自客户端的连接,连接后,客户端会发送一个条字段给服务端,服务端接到字段后打印出来,然后再把接收到的字段返还给客户端,算是完成了一次完整的通信。此外,服务器不只只能为一个客户端服务,也就是,有多少不同的客户端连接服务端,服务端都需要应答。这里涉及了服务端的并发编程,在这里我们使用多线程来满足要求:主线程监听连接,每当有一个来自客户端的连接到来时,主线程新开一个线程与客户端通信。
基础知识:
客户端-服务器的通信:
实际上两者之间是客户端的一个进程和服务器的一个进程在通信,并且都通过了各自固定的端口。
此外,通过这种方式,服务器可以给客户端提供服务,这是因为服务器拥有丰富的资源。
一次提供服务的过程称为:transaction
如下图所示:
I/O设备——网络:
如下图所示,网络只是一台主机的一个I/O设备而已,就像连接到I/O总线上的其他设备:键盘、显示器。只是一直数据的发送处或者接受处(serves as a source and sink
for data)。
for data)。
数据的流动:
较小的局域网,如下图所示,是用连接主机的双绞线和集线器(hub
)的玩意组成,并称之为:以太网段。
较大的局域网,如下图所示,是由网桥将不同的以太网段组成起来。网桥的更多解释请看书:616页
上两幅图我们经常简化如下图,代表一个局域网:
那么互联网需要我们利用路由器来连接,如下图所示:
现在看起来我们打通了所有的主机,利用集线器、网桥、路由器,但是这并不代表主机之间的数据就可以随意串流。为了数据的传达到该到的地方,而且能够完整的传达到。需要很多不同的协议,在本次通信中是使用了TCP协议,当然路由器之间也有更多的协议帮助我们传播数据,如下图所示,对于我们要传播的data,还需要很多一定的加工,符合协议要求才能传送到对的地方。
TCP/IP的数据传输:
每台主机都能利用TCP/IP协议传播数据,这里因为现代操作系统都支持这个协议,一幅图展现了硬件和软件的结合,来利用TCP/IP传输数据:
Section II Solution Method and Design
套接字接口:
不同的操作系统下,都提供