本站小编为你精心准备了P2P在线通信系统的实现参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版,广域网上的即时通信工具,如今一般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟,比如较早的MSN即时通信软件,还有国产的有名的QQ,网易泡泡这些工具统统都实现了广域网上的即时通信,尽管都实现了即时通信以及文件传输的主要功能,但是也各有各的特色,MSN的个性化表情,网易泡泡的易操作性等。而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时视频,语音聊天功能。这些软件在使用方面各有特色,在实现方面也各有所长,但由于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不可能得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP/IP协议的软件产品。在局域网内,这些功能的实现跟广域网相比更加简单,因为局域网的网络结构本身比广域网要复杂,但是又可借此理解网络协议以及网络通信工具的实现原理,所以仍然极具研究价值。本文将讨论一种基于Socket的局域网通信工具的设计与实现方法,它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。
1功能设计
该在线通信系统采用C/S架构,在此架构中,服务器端与客户端是相互依赖的。客户端启用以后,需要查看服务器端是否在线,服务器在线才能正常使用客户端,如果服务器不在线,则在检测一定次数后自动退出客户端程序。在使用过程中,如果客户端在指定时间内未向服务器端发送信息,服务器认为客户端下线;客户端在一定时间内未收到服务器端信息,认为服务器已经下线,则提示用户并建议退出,用户在一定时间后没有退出则自动关闭客户端程序。客户端是直接连接到拥有静态IP的服务器上的,此在线通信系统没有提供扫描功能所以需要指定服务器地址和昵称,客户端实现功能简单,仅能在客户端之间相互发送消息。
2基于Socket的C/S结构设计
MFC提供了两个套接字类,在不同的层次上对WindowsSocketAPI函数进行了封装,为编写WindowsSocket网络通信程序提供了两种编程模式。CAsyncSocket类,在低层次上对WindowsSocketAPI进行封装,其成员函数和WindowsSocketAPI的函数调用直接对应。必须自己处理阻塞问题、字节顺序问题和字符串转换问题。CSocket类,从CAsyncSocket类派生来的,是对WindowsSocketAPI的高级封装。(1)CSocket类结合archive类来使用套接字,就像MFC的序列化协议一样。(2)CSocket类管理了通信的许多方面,如字节顺序问题和字符串转换问题。(3)CSocket类为Windows消息的后台处理提供了阻塞的工作模式,这是Carchive同步操作所必需的。下面是使用CSocket对象进行客户和服务器之间通信的一般编程模型,它只适用于数据流套接字。(1)分别构造服务器和客户端套接字对象。(2)调用对象的Create函数创建套接字,而Create函数会调用Bind函数将此套接字绑定到指定的地址。需要注意的是为服务器创建套接字是需要为其指定端口号。(3)套接字创建完毕后,服务器调用Listen成员函数开始侦听客户的连接请求,而客户可以调用Connect成员函数向服务器请求连接。(4)当服务器监听到客户连接请求时,创建一个新的套接字,并将其传送给Accept成员以进行数据的发送和接收。(5)为服务器和客户端的套接字对象分别创建一个与之相联系的CSocketFile对象。(6)为服务器和客户端的套接字对象分别创建一个与CSocket-File相联系的CArchive对象以进行数据的发送和接收。(7)使用CArchive对象在客户端和服务器套接字之间传送数据。(8)在任务完成后,销毁CArchive、CSocketFile和CSocket对象。
3功能实现
用户通信前必须安装到本地计算机,通过正确设置后就可以进行实时p2p通信。客户端的实现主要分为登录模块、在线用户显示模块、通信模块、监听模块、请求模块五部分。在登录模块用户通过设置服务器端IP地址和用户昵称就可以连接上服务器,在昵称部分不能用字符‘|’‘、?’。当用户成功连接服务器登录后,客户端就由登录模块进入在线用户显示模块,这个模块能显示同一网段内在线的用户并能定时刷新在线用户列表。用户通过双击(除了用户自己外)在线用户就可以与其进行实时通信。在线用户的基本信息。服务器端由三部分组成:监听应答模块、请求模块、窗口管理模块。窗口管理模块主要以可视化的形式反映出基本的服务器及用户信息。左侧最新信息部分记录着服务器的状态,右侧在线用户部分记录着在线用户的昵称、IP地址,服务器能定时的刷新在线的用户。监听应答模块主要负责监听客户端发送来的连接请求并给与处理,监听模块主要使用OnAccept()函数调用Ac-cept()函数通知监听的socket应答待连接的客户端请求。如果客户端连接成功则服务器把这个用户加入到在线用户列表。请求模块主要负责告知服务器已创建的socket客户端发送的数据缓存在buffer中,通过调用Receive()函数读取buffer中的数据。请求模块还可以告知服务器已创建的socket和客户端的连接已断开,然后服务器用户信息列表部分定时刷新显示在线的用户。
4运行结果
用三台机器通过交换机构成一个局域网,进行正确的网络配置,三台机器上都安装了WINDOWS操作系统,一台安装服务器程序,另外两台安装客户端程序。在使用通信系统前必须启动服务器,如果服务器未启动或意外关闭客户端将无法登录。(1)双击服务器程序图标运行服务器,将会弹出对话框。(2)单击启动服务器按钮,启动服务器。服务器程序运行后,可以在本地运行客户单程序。(1)双击客户端应用程序图标,启动客户端,进入登录界面。(2)在登录界面填写服务器IP和用户昵称,确定后连接上服务器进入在线用户列表窗口。(3)在在线用户列表窗口双击想要与之通信的对象,打开了通信窗口,之后即可进行通信。
作者:朱浩悦 张军军 周楠 徐阳 单位:西安文理学院信息工程学院