APP下载

基于C#的多线程P2P即时通讯系统

2021-03-07吴晓华梁哲刘同来

电脑知识与技术 2021年36期
关键词:多线程局域网

吴晓华 梁哲 刘同来

摘要:为实现局域网内多个终端间信息、文件互通,同时满足用户对数据传输的即时性需求,结合P2P、Socket等通信技术,设计了一个多线程即时通讯系统。系统实现了局域网络中用户登录、在线用户列表实时更新、即时性信息传输以及文件传输等功能。系统摒弃第三方集中服务器,有效提升了数据传输的安全性;同时,数据传输不需第三方中转,其传输速率可得到大幅提升。此外,系统采用多线程通信技术,进一步加速了大文件的传输速率。

关键词:C#;P2P;局域网;多线程;Socket

中图分类号:TP311.52      文献标识码:A

文章编号:1009-3044(2021)36-0075-04

开放科学(资源服务)标识码(OSID):

A C#-based Multi-Thread P2P Communicating System

WU Xiao-hua1, LIANG Zhe2, LIU Tong-lai3

(1.Network and Information Technology Center, Guilin University of Electronic Technology, Guilin 541004, China; 2. China Mobile Guangxi Company, Nanning 530000, China; 3. College of Information Science and Technology, Zhongkai University of Agriculture and Engineering, Guangzhou 510225, China)

Abstract: To achieve the message and file interchange among multiple clients, as well as the immediacy demand of data transmission of the clients in a local area network, a multi-thread real-time communicating system is designed using technologies such as peer-to-peer, socket and so on. The system realized the functions of user login, real-time updates of online user list, real-time message and file transmission, etc. The system eliminates the third-party centralized server, which effectively improves the security of data transmission; In the meanwhile, since there is no need for a third party to transfer data, the data transmission rate can be greatly increased. In addition, the system uses multi-thread technology, which further accelerates the transmission rate of large files.

Key words: C#; P2P; LAN; multi-thread; Socket

1 背景

作为效率低、费用高的信件、电报、电话等老式通信技术的替代品,即时通讯系统因其快速、便捷等特点,被人们广泛应用于教育、商业以及社交活动中。同时,随着互联网技术的迅速发展,即时通讯系统被赋予越来越多先进的功能,如文件传输、远程视频等,其实时性也得到不断提高,给人们带来诸多便利。

现有的即时通讯系统,大多采用集中式服务器-客户端架构(即C/S架构)实现用户注册、登录以及好友列表等功能。在此网络架构下,用户凭据、聊天内容等重要信息存储在服务器端的数据库中,任何能够访问服务器和数据库的人都可以轻松访问用户信息,存在较大的安全隐患。同时,其资源损耗总是集中在服务器端,运营成本较大。此外,一旦服务器发生故障,数据损失将不可挽回。

作为另一通信方案,点对点架构(Peer to Peer,P2P),因其去中心化、健壮性、可扩展性等优势,广泛应用在即时通讯领域[1-2]。没有了第三方服务器的介入,即时通讯系統将由用户控制,信息安全由通讯双方自主管理,大大提高了系统的安全性。

众所周知,进程是指在PC系统中正在运行的一个应用程序,是程序的基本执行实体,它同所有进程共享相同的一个存储空间。而进程的执行需要依赖线程,也就是说,线程是进程的最小执行单位。一般来说,一个进程中需要一个线程支撑。为加快文件的下载速率,本文采用多线程技术实现同步下载。

本文采用P2P、Socket、线程池等技术,实现以下功能:

1)实现同一局域网内用户注册、登录、查看在线列表等功能,用户主机之间实现即时通讯。

2)实现多用户间文档、音频、图片以及视频等文件的传输。

3)实现多线程多任务同步,加速文件下载。

2 关键技术

2.1 P2P

与常见的C/S网络架构不同的是,P2P网络环境中的节点既可以充当服务器端,为其他节点提供服务,如资源、算力共享,信息交换等;又可以作为客户端,获取其他节点提供的服务。网络中彼此连接的每个节点之间没有主从之分,其关系对等,因此又称对等网络[3]。如图1所示为两种不同网络的基本架构。

利用P2P技术,可以充分利用边缘网络中潜在的带宽资源以提高通信效率,同时还能克服中央服务器因带宽、存储等资源有限所导致的性能瓶颈。

2.2 多线程

为实现文件的多线程多任务同步,本文将文件的下载过程划分为以下3个模块:

1)任务创建

如图2所示,每个待传输文件将被创建为一个任务,即时通讯系统向PC请求当前内存使用状况,并申请多开线程。当线程数量确定时,系统将对文件进行分块,以达到同时下载。最后发送线程启动消息,等待下载完成。

2)线程锁机制

在多线程下载过程中,为避免多任务之间的线程互相干扰,保证线程的安全。如图3所示,本文引入线程锁机制,即某一进程将某个线程占用时,系统将对该线程进行加锁操作,直到该进程结束,才对线程解锁。这样一来,可以保证系统同时运行多个线程时,相互之间互不干扰,为实现多任务同步下载提供了技术支持[4]。

3)线程下载

线程接收到启动请求,获取下载任务分配的数据分块,此时线程被锁。等到数据接收完毕之后,线程发送请求解锁消息,系统释放该线程,以便其他下载任务使用,如图4所示。

2.3 局域網通讯

局域网通讯的高效、轻便、低成本、易于管理等特点,使得其能应用于校园网、企业网等封闭私有领域[5]。基于局域网的即时通信系统能够快速建立局域网内用户的信息交流。广域网上的即时通讯软件,一般采用UDP或者TCP协议体系[6]。国内常见的即时通信软件有较早的MSN即时通信软件,还有腾讯公司的QQ、微信等,国外有Line,WhatsApp,Skype等。这些软件在实际体验方面各具优势,也基本具备了实时通信、照片传输,甚至语音通话等功能[7]。然而这些软件的具体实现代码均属于商业机密,各种技术细节不得而知。在局域网环境下,相较常见的基于广域网环境设计的软件,局域网即时通讯系统虽然更容易被实现,但可借此理解TCP、UDP等通信协议以及Socket的实现原理,具有一定研究价值。

2.4 Socket

套接字(Socket)可以看作是双向通讯信道中的一个端点,其为不同主机之间通讯创建通信通道,一般由IP地址和端口组成,是一个通信链的句柄[8-9]。Socket的简单通信过程如图5所示。首先,服务器端初始化Socket,绑定IP地址以及端口,同时服务器端对该端口进行监听,等待客户端的连接;这时有一个客户端创建一个Socket,与该端口进行连接,经过“三次握手”之后,客户端便可以与服务器端成功建立通讯;接着,客户端可以向服务器端发送服务请求,比如数据共享、算力共享等;服务器端接受请求并处理,然后把请求的服务数据回馈给客户端,客户端读取数据;最后,连接关闭,一次通信交互结束。

基于Socket设计与实现局域网通讯,具有信息收发速度快、保密性好、易于编程实现等优点。

3 系统功能

3.1 登录模块

用户运行即时通讯系统,输入用户名登录。登录之后系统采用UDP广播整个网段,同时检测处于同一局域网环境中的在线用户,并发送用户名和IP地址信息,告知其他用户“我已上线”。与此同时,用户接收上线用户的广播消息,并把广播主机加入通信名单。至此,不同用户间已经能够相互通讯。

3.2 通信模块

通信模块是本系统的主要模块,该模块实现了用户间信息交流,文档、图片、音乐以及视频等文件的传输,该模块的实现主要基于Socket技术。Socket端口首先对系统中端口进行监听,当某个用户请求文件传输时,建立文件发送连接,同时对方建立接口进行文件接收,以此实现文件传输功能。

3.3 实现多线程通信

对于P2P网络,每一个用户既是客户端又是服务器端,当建立连接后,其中一个客户端提出请求,服务器端将产生一个线程用来与该客户端建立起Socket连接。由于线程的创建和销毁会产生一定开销,同时线程过多带来调度开销以及降低内存资源利用率,进而影响系统整体性能。出于对性能的考虑,本文引入线程池模式。线程池维护着多个线程,等待系统分配可并发执行的任务,线程执行完毕之后不会立即被销毁,避免了处理短期任务频繁创建与销毁线程导致的执行延迟以及能耗等代价。

4 实验结果与分析

程序在三台计算机上进行了运行,并测试功能的完备性,系统基于C#语言开发,对系统的登录功能、通信功能以及文件传输功能进行了测试。

如图6为此聊天系统的启动界面,显示本机IP地址以及登录用户名。

如图7所示,用户成功登录系统,通过UDP向整个网段广播,通知所有在线用户。

如图8所示,监听到新用户上线所发送的UDP消息,将新上线用户添加入通信列表。

局域网下文件的P2P共享,包括音频、图片以及视频等文件的传输,是本系统最核心的功能,系统的多线程多任务主要在此模块实现,实现文件传输与通信功能同步。

如图9所示,其中一个用户向另一用户发送文件,在选择文件以及保存文件时调用Window自带的文件存储目录,完成文件的发送和接收。

信息发送是本系统的另一个核心功能,包含以广播形式发送的文字信息,以及选择某个用户进行私聊的通信模块,信息发送的实现同样采用基于Socket技术。

如图10所示,选择想要进行对话的用户,应用P2P技术,便可进行聊天,系统显示用户发送消息的时间、用户名以及用户IP地址。

5 结束语

本文所设计和实现的多线程P2P即时通讯系统,采用了P2P技术,Socket技术以及线程池等技术,实现了登录模块,即时通讯模块以及文件传输模块。采用基于TCP的Socket通信机制,保证了网络通信的准确性、及时性。通过在三台设备上进行测试,系统运行稳定,文件传输速度快。系统很好地解释了P2P、Socket以及多线程技术的实现原理,为后续开发多线程P2P通讯技术提供了参考。

参考文献:

[1] 李佳琦.基于P2P技术的即时通信监控系统研究[J].中国管理信息化,2017,20(17):187-188.

[2] 王建.基于JXTA的P2P即时通信软件的Java实现研究[J].无线互联科技,2018,15(4):11-12.

[3] 江凤莲.P2P技术综述[J].电脑知识与技术(学术交流),2006,2(12):36-37,65.

[4] 贺嘉贝.基于P2P的局域网多线程共享软件设计[J].电脑编程技巧与维护,2016(8):21-23,55.

[5] 徐文莉,熊燕,李燕.P2P即时通信系统关键技术研究及应用[J].软件导刊,2017,16(9):151-153,157.

[6] 光文华.基于局域网的即时通信软件设计与实现[D].昆明:昆明理工大学,2014.

[7] 朱浩悦,张军军,周楠,等.基于Socket的P2P在线通信系统的实现[J].黑龙江科技信息,2015(31):153.

[8] Yogi T,Shiroma T,Nagata T,et al.Study on P2P Communication between Web Browsers using WebSocket[J].Ieice Technical Report,2010(110):59-62.

[9] 朱浩悦,张军军,周楠,等.基于Socket的P2P在线通信系统的实现[J].黑龙江科技信息,2015(31):153.

【通联编辑:谢媛媛】

猜你喜欢

多线程局域网
轨道交通车-地通信无线局域网技术应用
基于VPN的机房局域网远程控制系统
基于802.1Q协议的虚拟局域网技术研究与实现
局域网性能的优化
Java并发工具包对并发编程的优化
基于多线程文件传输关键技术研究与实现
网页爬虫技术的关键技术研究探索
一种基于多线程的高速磁盘镜像算法