`
逆风的香1314
  • 浏览: 1416572 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于TCP的局域网多用户通信、文件传送程序详解

阅读更多

一、构架设计
  整个系统分为三个相关的程序模块,即注册登陆服务器(wbQQRegSer)、聊天通信服务器(wbQQChat)以及用户程序(wbQQClient)。其中,注册登陆服务器负责用户的注册、登陆以及数据库管理;通信服务器负责完成数据转发以及共享数据结构的管理;用户端则完成注册、登陆、通信和文件传送功能。在进行文件传送时,任一客户程序均可以既作为文件传送服务器发送文件,也可以作为客户端接收文件,实现半双工的文件传送。整个系统构成如图一:


图一 系统构架图

二、注册登录服务器设计
   注册登录服务器采用面向连接的并发式方式,服务器设计成为一个对话框程序。调用WSAStartup初始化动态库,socket函数创建套接字, bind函数绑定本地IP地址和端口,listen函数使套接字进入侦听,然后由于调用accept()函数将产生阻塞,所以不宜在主线程中调用该函数, 因而在初始化网络后 当用户按下“运行注册登录服务器”按钮后,利用侦听套接字启动注册登录线程RegLoad(void *s)进入无限循环,在线程中调用accept函数,用来接受来自客户端的连接请求,每当一个连接请求到来时,accept()函数将产生一个新的套接 字,利用这个套接字产生一个新的线程talkToClient(void *cs)与客户端进行通信并读写数据库,通信完毕后关闭该套接字和线程,原来的侦听套接字继续处于侦听状态。
  两个服务器程序可以在同一台物理机器上运行,也可以在不同的机子上运行,为方便服务器的控制,在注册登录服务器调用函数
CreateProcess( NULL,
".\\..\\wbQQChat\\wbQQChat.exe", // Command line.
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent''''s environment block.
NULL, // Use parent''''s starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi )

创建聊天通信服务器进程,想关闭时则调用TerminateProcess(m_hProcChat, 2)函数关闭此进程。

三、聊天通信服务器设计
  聊天通信服务器设计为无界面的进程(创建时先建一个基于对话框的应用程序,然后把对话框类删除,把APP类里面与对话框有关的语句全删除即可创建无界面进程),采用共享数据结构,为每个客户端创建两个线程,实现接收和转发的功能。第一个线程用于发送,
hHandleSend = AfxBeginThread(SendData,(LPVOID)clientSocket,0,0,CREATE_SUSPENDED,NULL);

第二个线程用于接收:

hHandleRecv = AfxBeginThread(RecvData, (LPVOID)clientSocket);

四、客户端设计
  客户端设计成为对话框的用户界面,主要分成四个模块,分别是注册模块、登录模块、聊天模块和文件传送模块。
   在程序运行后的第一个对话框,客户可以选择登录或注册,若是注册则启动注册向导,分三步完成注册工作,第一步为基本信息登记,包括头像选择、用户名、性 别、密码,其中用户名和密码将在注册成功后登录使用。第二步为详细资料,包括真实姓名、城市、E-mail地址和电话号码。第三步为网络设 置,分别是注册登录服务器的IP地址和端口号,聊天通信服务器的IP地址和端口号,也就是说两个服务器程序可以分别位于不同的物理机器,以减轻服务器运行 时的负荷。点击确定后,客户端将与指定的IP地址和端口号去连接注册登录服务器,成功连接后服务器执行注册操作,并返回注册结果。
  客户注册成功后,即可用注册时的用户名和密码进行登录,将登录信息按注册时的网络设置发往服务器,服务器执行登录操作并返回注册结果,登录成功则连接聊天通信服务器,否则退出程序。
登录成功出现聊天对话框,可以从下拉组合框选择好友,发送信息的同时将信息写入聊天记录文件,服务器收到信息后依照接收者用户名进行转发。若客户收到信息则闪动托盘处的图标,提示用户收到信息,用户可以点击回答进行回复。
   当登录成功后,用户也可以在选择好友后点击传送文件按钮来进行文件传送。当客户A向客户B发送文件时,A弹出传送文件对话框,提示给B发送文件,等待B 的回应,客户B将弹出消息框告知A向B发送文件,B可以接收也可以拒收。文件收发完毕后,点击关闭按钮关闭文件传送对话框。

五、网络传输协议设计
  为了让客户端和服务器能够协同工作,必须在通信过程中定义一套规则也就是协议,让双方能够相互听懂,并依照协议执行相应的功能块。
   客户端注册时发送的消息为Reg: + BasicDlg.m_strUserName + BasicDlg.m_nAge + sex + BasicDlg.m_strPassWd + MiscDlg.m_strTruName + MiscDlg.m_strCity + MiscDlg.m_strEmail + res + MiscDlg.m_strTel,注册时发送消息的头部为Reg。登录时发送的消息为:Load: + m_strUserName + m_strPassWd,登录时发送消息的头部为Load。注册登录服务器收到客房端的消息后检查其头部,若是Reg则执行注册操作,注册成功则返回 success!,用户名已经存在则返回exist!,其它原因注册不成功则返回Error!;若是Load则执行登录操作,登录成功返回 success!,登录不成功则返回error!。客户端依照返回信息做出相应提示,并执行相应功能模块。
  登录成功后,客户端将自己的用户名 发送给聊天通信服务器,服务器为客户端创建一个套接字,两个线程,并填充socketInfo结构,连入链表。客户端发送消息结构为:“接收者用户名” + “:” + “发送者头像ID” + “~” + “(星期、月、日、年、时、分、秒)” +"\t" +"发送者用户名" +“->” + “接收者用户名” +"\n\r" + “发送的消息”,其头部均为接收者用户名,服务器依照用户名查找链表,截掉头部后把原信息进行转发,若客户端关闭, 则发送消息为Close!,服务器从链表中删除相应项。
  客户端可能收到的消息有三种,第一种为普通消息,结构如前所述;第二种为 SendFile!,表示对方想向己方传送文件;第三种为Refuse!,表示对方拒绝接收己方文件。客户端A想给客户端B传送文件,则发送消息为 SendFile!,B收到SendFile!后弹出消息框,提示对方向己方传送文件,接收按“是”,执行文件接收功能;拒绝按“否”,发送 Refuse!

六、附加说明

  1. 本软件在win2000professionSP4 + VC6MFC环境下开发和测试通过,使用前要注册ODBC数据源;数据源名称:wbQQuser;类型:ACCESS;文件名:wbQQuser.mdb,不明了之处请参看源程序,注释很清楚。
  2. 多线程通信使用的全局变量导致函数耦合度较大。
  3. 有些函数太长,导致功能不单一,内聚度降低。
  4. 客户端点击传送文件后,应使该按钮无效,直到文件传送完毕或文件传送线程关闭再使之有效,如不使用全局变量有什么好办法实现。
  我认为学好一种技术爱好是最好的老师,交流是最好的方法,请高手赐教。 
分享到:
评论

相关推荐

    基于TCP的局域网多用户通信、文件传送程序详解.rar_tcp 通信_基于TCP-IP多线程文件传输_多用户_局域网文件_飞鸽传

    本文将深入探讨基于TCP协议的局域网多用户通信和文件传送程序,结合"飞鸽传书"这一实例,来解析相关技术要点。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议...

    基于TCP的局域网多用户通信\文件传送程序详解

    在基于TCP的局域网多用户通信中,各个设备通过共享介质或者交换机互相连接,TCP协议允许这些设备之间进行高效、可靠的通信。多用户通信意味着多个设备可以同时参与数据交换,实现文件分享、聊天等功能。 【文件传送...

    基于MFC局域网聊天和文件传送程序

    《基于MFC的局域网聊天与文件传送程序详解》 在信息技术日益发达的今天,局域网内的通信和文件共享已经成为日常工作中不可或缺的一部分。本文将深入探讨一款基于MFC(Microsoft Foundation Classes)开发的局域网...

    基于TCPIP的局域网多用户通信.pdf

    【基于TCP/IP的局域网多用户通信】技术详解 TCP/IP协议是互联网通信的基础,其特点是面向连接、可靠的数据传输。在局域网多用户通信中,TCP/IP扮演着核心角色,允许不同设备间建立稳定的通信链路。在Windows操作...

    tcp.rar_TCP通信_tcp_tcp 文件_文件传送

    在提供的文件“www.pudn.com.txt”和“基于TCP的局域网多用户通信、文件传送程序详解”中,可能包含有关TCP通信和文件传输的详细实现方法、代码示例、注意事项等内容,对深入理解TCP通信和实现文件传输的程序设计...

    局域网通信数据文件传输工具

    《局域网通信数据文件传输工具详解》 在信息技术日新月异的今天,局域网(LAN)内的高效文件传输已经成为日常工作中不可或缺的一部分。本文将深入探讨一款名为“局域网通信数据文件传输工具”的应用程序,它以其...

    C#版C/S、CC局域网聊天、文件传输(源码与实验报告)

    该系统不仅提供了实时的文字交流功能,还具备了文件传输的能力,尤其适合于局域网内的多用户互动。 一、C/S架构基础 C/S架构是一种经典的网络通信模型,由客户端(Client)和服务器(Server)两部分组成。客户端...

    基于TCP/IP的局域网聊天程序

    综上所述,这个基于TCP/IP的局域网聊天程序是一个涵盖了网络通信、多线程编程、异步I/O和数据库操作等多个技术领域的综合项目。其设计和实现不仅涉及底层的网络协议,还包括上层的用户体验和数据管理,是学习和实践...

    VC 基于UDP协议的局域网通信工具

    **VC++实现基于UDP协议的局域网通信工具详解** 在计算机网络编程中,UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、不可靠的传输层协议,相较于TCP(传输控制协议),它提供了更低的延迟和更高的...

    基于C#的局域网应用商店程序

    综上所述,"基于C#的局域网应用商店程序"项目涵盖了从基础编程到网络通信,再到UI设计的多个重要知识点,是一个综合性的C#项目实践。通过学习和实现这样的项目,开发者可以提升在C#编程、GUI设计以及网络应用开发等...

    易语言局域网文件传送

    总的来说,易语言局域网文件传送不仅涉及网络通信的基本原理,还涵盖了文件操作、错误处理和用户交互等多个方面。通过学习和实践,开发者可以熟练掌握这一技术,为日常的工作和生活带来更多的便利。

    MFC基于UDP、TCP及点对点的文件传输和聊天工具

    总的来说,"MFC基于UDP、TCP及点对点的文件传输和聊天工具"是一个涵盖网络通信基础和MFC高级应用的项目,它要求开发者具备扎实的C++编程基础,理解TCP/IP协议,熟悉MFC框架,以及一定的多线程和网络编程经验。...

    易语言局域网通信EasyChat(自制,开源)附源码

    同时,为了实现多用户之间的通信,EasyChat可能会涉及到多线程或异步编程,以确保多个并发连接的处理能力。 对于即将添加的文件传输功能,EasyChat可能采用断点续传、校验码验证等机制,确保大文件在局域网内的安全...

    wbQQ_局域网通信_functionxcj_Vc_

    【描述解读】:描述中提到“基于TCP的局域网多用户通信、文件传送程序详解VC源代码”,意味着该程序利用了传输控制协议(TCP)来构建一个能够在局域网内允许多个用户同时进行通信和交换文件的系统。"详解"一词表明这...

    MFC实现基于TCP的局域网聊天工具客户端和服务端分开

    《MFC实现基于TCP的局域网聊天工具:客户端与服务端详解》 在计算机通信领域,局域网聊天工具是一种常见的应用场景,它允许在同一网络内的用户进行实时交流。本项目利用Microsoft Foundation Classes (MFC) 和TCP...

    Qt基于tcp和udp局域网聊天工具

    本篇文章将深入探讨如何使用Qt来构建一个基于TCP和UDP的局域网聊天工具,让多台计算机之间可以实现实时的通信。 首先,TCP(传输控制协议)和UDP(用户数据报协议)是网络通信中的两种主要协议。TCP提供面向连接的...

    vc写的局域网多用户聊天程序

    《VC实现的局域网多用户聊天程序详解》 在信息技术高速发展的今天,人们对于通信方式的需求日益多样化,其中局域网内的实时通讯是许多应用场景中的基础需求。本文将深入探讨一个利用VC(Visual C++)编写的局域网多...

    基于delphi的局域网传输 源代码

    描述中提到的"一个局域网传输的源代码,基于Delphi开发"进一步强调了该源代码的核心目标是实现局域网内的文件或数据交换。源代码是程序的原始形式,可以直接编译和运行,对于学习和理解网络通信的实现细节非常有价值...

    基于UDP在广域网和局域网都能通信类似QQ的聊天程序

    **基于UDP的跨网络通信聊天程序** UDP(User Datagram Protocol)是一种无连接的、不可靠的传输协议,常用于实时性要求高、数据丢失可以容忍的场景,如在线游戏、视频会议和即时通讯等。本项目是实现了一个类似于QQ...

    用Winsock制作的局域网文件传输系统, 传输速度超快

    《基于Winsock的局域网高速文件传输系统详解》 在信息技术日新月异的今天,文件传输成为了日常工作和生活中不可或缺的一部分。对于局域网内的设备来说,快速、高效的文件传输系统更是至关重要。本文将深入探讨一个...

Global site tag (gtag.js) - Google Analytics