WEB开发网
开发学院软件开发VC 基于TCP的局域网多用户通信、文件传送程序详解 阅读

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

 2010-06-27 20:41:57 来源:WEB开发网   
核心提示:二、注册登录服务器设计注册登录服务器采用面向连接的并发式方式,服务器设计成为一个对话框程序,基于TCP的局域网多用户通信、文件传送程序详解(2),调用WSAStartup初始化动态库,socket函数创建套接字,B可以接收也可以拒收,文件收发完毕后,bind函数绑定本地IP地址和端口,listen函数使套接字进入侦听

二、注册登录服务器设计

注册登录服务器采用面向连接的并发式方式,服务器设计成为一个对话框程序。调用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可以接收也可以拒收。文件收发完毕后,点击关闭按钮关闭文件传送对话框。

Tags:基于 TCP 局域网

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接