1 引 言
客户机/服务器模型中,发起连接的计算机被称为客户机,接收并建立连接的计算机被称为服务器。根据此模型,计算机网络通信也多采用架设服务器并通过服务器转发的方式进行客户机之间的数据通信,然而,这种网络通信方式存在一定的缺点,主要在于:
(1)如果网络中各主机间需要通信,就必须先要架设服务器,使用非常不方便。
(2)各个网络主机之间的通信数据必须先由源客户机发给服务器,再通过服务器转发至目的客户机,因此数据并没有在客户机之间直接传递,通信效率较低。
本文就是针对以上问题,以客户机/服务器模型为基础,设计出一种不需要服务器支持的局域网通信系统,使局域网内不同计算机问的通信不再需要通过服务器中转,实现了不同计算机问的数据的直接传输。
2 系统框架设计
ISO的OSI七层模型中,传输层有TCP和UDP两种协议,对应于这两种协议有流式套接字和数据报套接字。该系统使用了UDP广播消息和建立TCP连接进行数据传输的方式。
多线程的并行处理可以提高程序的吞吐量,多任务的相互独立性也使程序在运行时间效率方面得到提高。网络通信中任务繁杂,因此将网络通信机制与多线程并行处理机制结合是一种有效的解决方案。该系统的通信任务主要通过3个线程并行完成,分别为:
(1)负责收发广播的线程:该线程通过收发广播消息的形式,获得局域网内使用该系统的计算机信息。将局域网内使用该系统的计算机信息添加进本地链表;将局域网内退出该系统的计算机信息从本地链表中删除。本地链表维护了局域网内所有使用该系统的计算机的信息,为系统其他功能的实现提供数据。
(2)负责监听端口建立连接的线程:该线程的功能类似于客户机/服务器模型中的服务器端,对局域网中的连接请求进行监听,对于新的连接请求建立新的Socket用于连接,并且对于不同的连接请求创建新的数据接收线程,用于处理连接后的消息传递以及文件传输等功能。
(3)负责处理外部终端控制命令的线程:该线程用于该系统与用户的交互,处理外部终端的控制命令,并对于不同的命令实现相应的功能。
系统结构如图1所示。
3 系统实现具体流程
3.1 发送和接收广播的线程设计流程
广播消息线程使用UDP套接口,他与TCP套接口的主要区别在于通信双方不需要事先建立连接即可收发数据。该线程工作流程如下:
(1)主机在局域网中广播本机“上线”消息;
(2)主机等待接收局域网中的广播消息;
(3)如果主机收到其他计算机“上线”广播消息,则将发送该广播消息的计算机信息添加进本地链表,并且回复“确认”广播消息;如果主机收到“确认”广播消息,则对发送该广播消息的计算机信息进行判断,如果链表中没有记录,则添加进本地链表;如果主机收到“离线”广播消息,则将发送该消息的计算机在本地链表中的信息删除。
3.2 监听端口建立连接的线程设计流程
该线程监听TCP套接口,对于不同的连接请求创建新的数据接收线程并发处理。工作流程如下:
(1)创建本地Socket,并监听局域网中的连接请求;
(2)如果有连接请求进人,接收连接请求,并创建新的Socket和数据接收线程用于该连接的数据通信功能的实现。
因为该系统提供文件传输功能,所以在数据接收线程接收到数据包后,需要判断该数据包中的信息是否为文件传输开始标志。如果是文件传输开始标志,表明信息发送方将传输文件,则主机进入文件接收工作程序;如果不是文件传输开始标志,则主机在终端上显示接收到的消息。
3.3 命令处理线程的主要控制命令及其设计流程
(1)局域网在线计算机查询命令:顺序读取主机链表中所维护的所有的节点信息,终端显示局域网中所有在线计算机情况,包括其主机名、IP地址等;
(2)主机离线命令:广播“离线”消息,断开Socket连接,结束进程。
(3)发起连接命令:通过查询系统维护的计算机信息链表,获得想要与之建立连接的计算机的信息,发起连接,若连接成功,创建数据发送线程用于处理连接后的命令操作以及数据通信,并且阻塞命令处理线程,直到数据发送线程结束返回。
数据发送线程对终端输入进行读取和判断,如果是文件传输命令,则进入文件发送工作程序;否则,直接发送消息。
该系统的文件发送与接收流程如图2所示。
4 系统实现主要代码
5 结 语
本文基于网络Socket通信原理与多线程技术,给出了在Linux环境下不需要服务器支持的网络通信系统的设计与算法实现,此实现方法使局域网的计算机间通信效率得到了提高并且该系统使用非常方便,适用于局域网计算机间的即时数据通信。如何在此系统框架的基础上添加更多的数据通信功能以及如何加快文件传输速度将是进一步的研究工作。
来源:电子产品世界