基于TCP的局域网多用户通信、文件传送程序详解
2010-06-27 20:41:57 来源:WEB开发网五、网络传输协议设计
为了让客户端和服务器能够协同工作,必须在通信过程中定义一套规则也就是协议,让双方能够相互听懂,并依照协议执行相应的功能块。
客户端注册时发送的消息为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!
六、附加说明
本软件在win2000professionSP4 + vc6MFC环境下开发和测试通过,使用前要注册ODBC数据源;数据源名称:wbQQuser;类型:ACCESS;文件名:wbQQuser.mdb,不明了之处请参看源程序,注释很清楚。
多线程通信使用的全局变量导致函数耦合度较大。
有些函数太长,导致功能不单一,内聚度降低。
客户端点击传送文件后,应使该按钮无效,直到文件传送完毕或文件传送线程关闭再使之有效,如不使用全局变量有什么好办法实现。
我认为学好一种技术爱好是最好的老师,交流是最好的方法,请高手赐教。
QQ:2105629
Email:lwb75@sina.com。
志存高远,脚踏实地,生命不息,奋斗不止!
本文配套源码
更多精彩
赞助商链接