基于局域网的超简易即时通讯软件(二)

  好吧,自己挖的坑自己得埋上。继续~

  好了,接下来就是好友列表界面了,在主界面登录成功后,跳转到本界面(如图2-4)。在用户添加好友后,显示用户的所有好友,并在窗体上方显示用户头像、昵称、QQ号、个性签名等。个性签名在用户点击前为不可编辑,在点击后转为可编辑,在用户输入完新的个性签名后,焦点离开本控件,控件重新变成不可编辑,同时将新的个性签名存储到数据库中。好友列表显示主体用的是treeView,循环从DataSet中读取数据库映射出的数据集(恩,之前用TableAdapter将数据从数据库中映射到DataSet内,写了个MYQQDataSet.xsd)。个性签名用的是toolStripTextBox,在点击事件中写了一个readonly方法,将readonly设置为false,在离开事件中把更改的信息写入数据库,再将readonly设置为true。头像的显示,则是在存储的时候,我将图片的路径存储进了数据库,这样写的好处是。。。简单~(好不要脸的),坏处是一旦更改了路径,很有可能出现图片显示不出的结果,所以这里建议还是将图片转为2进制再存储吧。这里建议的优化是,好友列表不要用treeView,自己画是个不错的选择。

图2-4 好友列表

 

  接下来是添加好友,添加好友分为模糊查找和高级查找,模糊查找仅可查找到QQ号,昵称,性别,头像等(如图2-5),而高级查找可以在模糊查找的基础上查找到生日和个性签名(如图2-6),两者查找的区别是,模糊查找需输入的是昵称,而且是部分匹配即可查找;而高级查找则是查找QQ号,需要准确输入被查找者的QQ号。然后好友的数据库我设计的比较傻逼,因为我程序读的时候只读了包含本次登录QQ号的数据的第一列,所以我在添加好友时将写入数据库两行信息,一个是本QQ号在数据库的第一列,好友QQ号在数据库的第二列;还一个是将两者倒过来。说的比较抽象。。。将就着看吧,实在不懂可以私我,相信有办法看懂的(略略略#摊手)。为了方便多账号用户不将多个QQ号混淆,而加错好友,所以特意在界面的最下方显示了当前使用用户是谁(呵呵, 说的跟真的用的到似得#白眼)。

图2-5 模糊查找

图2-6 高级查找

 

  聊天是程序的核心,把这个放在最后和服务器一起写,看的也方便点。聊天界面是通过好友列表双击好友头像进入的(如图2-7),服务器是独立与客户端的一个程序,服务器如图2-8所示。

  服务器开放在本机的所有IP地址上(像我电脑上是多张网卡的,程序会自动在两个IP上都打开服务器),我设置的服务器默认端口为6600,监听初始化时挂起数为10,设置最大传输字节数为65535,这些都是Socket基础的,恩~程序这里没有用什么127.0.0.1或者是Localhost之类的,所以是真正意义上能实现局域网通信的软件。当用户连接上服务器后,服务器上会有记录,记录用户的IP和端口号。突然感觉又没什么说的了,都是基础的Socket技术,具体流程就是服务器运行Socket,运行线程,为客户端建立Socket连接,然后将SOCKET接口和IP端口绑定,监听指定的Ip和端口,将接受客户端连接的方法委托给线程,接着让线程开始运行。再写一个接受客户端连接的方法RecieveAccept(),Accept 以同步方式从侦听套接字的连接请求队列中提取第一个挂起的连接请求,然后创建并返回新的 Socket。在阻止模式中,Accept 将一直处于阻止状态,直到传入的连接尝试排入队列。连接被接受后,原来的 Socket 继续将传入的连接请求排入队列,直到主动关闭它。

  服务器说完了,说说客户端的,先实例化一个tcp流套接字,然后设置信息接受发送的字节数为65535,设置服务器的IP地址(这个真的好烦,因为学校的网络原因,经常会变动我的局域网IP地址,导致过段时间运行程序,IP地址都得进程序修改,不想每次修改源代码,你也可以把IP地址写到一个XML文件里,然后每次从这个文件修改,程序也从这个XML文件里读取IP地址,当然了,真正的服务器是不会有这个问题的),同样的因为服务器的端口号设置为6600,所以这里的端口号也是6600,其他的。。。 好像都没什么好说的,就是假如服务器没连接上会有弹出窗提示,假如在中途与服务器断开连接,信息无法发送同样会有弹出窗提示。具体客户端的测试呢~如图2-9所示。

图2-7 聊天界面

图2-8 服务器

图2-9 聊天的测试

 

 

 

   呼呼呼~差不多也就是这样了,简单的程序,简单的介绍(#捂脸),程序呢,差不多写完有大半年了,这次写博客,感觉收获还是不少的,对程序的重新阅读,能发现之前写程序的很多的不足。虽然程序的BUG不少,博客写的也不是很好,但毕竟都是第一个,再接再厉吧。哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈~~~~~~嗯嗯~就这样结束第一篇博客吧。                        

                                                                         完

 

转载于:https://www.cnblogs.com/mingwei-cheng/p/6519049.html

程序架构: WinForm .net 4.0 功能点: 一、日常提示 上下线提示,更新获取局域网QXin用户列表,正在输入提示、类QQ界面模式 、字符串通信 单用户字符串通信、多用户字符串广播 三、文件通信 单用户单文件传送,单文件夹传送、多文件多文件夹混合传送。 多用户广播传送 程序实现过程: UDP通信:(上下线提示,字符串通信) 一发一回的方式,例如:用户A上线,以广播的方式发送“我上线啦”的消息,其他用户接收后把该用户加添到用户列表里,返回一个“已收到”信息,用户A接收到各个用户返回的信息并一一加载到用户列表。 TCP通信:(文件传送) 首先用户A以UDP方式通知用户B,”我要发送某某文件”,用户B接收后,AB用户开始进行TCP连接,然后发送文件 单文件发送和文件夹发送差别很大,由于文件夹不是文件,只能通过发送消息通知远程用户在什么地方建立一个文件夹,然后送该文件夹下的文件。如果该文件夹有子文件夹,又系同样的方式通知远程用户在哪个文件里新建子文件夹,不断递归。 (PS:飞鸽协议是开源的,不过飞秋可不是,飞秋虽然同样采用飞鸽协议,但是在此基础上增加修改了不少内容,要兼容飞秋需要用WPE抓包分析飞秋的数据包。) 分层架构模式思想: 所谓分层架构,分层架构并不是一个程序分几个模块或者源文件就是分层架构,分层架构是一种模式,分层架构必须只能自上往下操作,下层不知上层的内容,上层只能调用其下层的函数,UI层调用BLL层,BLL层调用DAL层. 而BLL层是绝不可以调用UI层的. 例如BLL层绝不能出现MessageBox等winform方法。而且,要做到BLL和DAl 在脱离UI表面层后,转到控制台通过调用其类和方法也能正常运行,才算好的分层架构。
一个面向局域网、互联网的即时聊天工具,它专门针对学校及企业内部的网络通讯而开发的。 Messenger除了具有一般聊天工具都有的基础功能以外,还有自定义表情符等高级功能,使用简单,服务器无需特别数据库配置。 本软件很适合作为学校、企业内部局域网的通讯工具。 用户登录基本原理 1.用户登录,客户端根据用户填写的IP向服务器发送连接请求,若IP正确且服务器工作正常。服务器会在Winsock数组(Servicesocket(i))中建立一个连接,同时在自定义类型数组UserInfo(u)中初始化一个索引值与该用户使用的Servicesocket索引(Index属性)值相同的元素,并将其所有值设置为N/A(执行LogIn函数)。然后,服务器调用 New_User 、Login_user 判断用户提交资料与服务器存储的用户资料是否相符(密码是否正确、是否新用户、服务器状况是否允许用户登录等)。若条件符合,服务器向客户端发送登录成功信号(.LoginGood Svc2)并将用户资料写进属于该用户的UserInfo类中。否则向客户端发送登录失败信号(.LoginBad [失败原因代号]),断开连接。 2.用户收到服务器的登录成功信号后,向服务器提交获取好友列表请求(.getbuddys)。服务器收到该请求后调用 GetBuddysFromDB 、Get_User_buddies 完成对该用户好友的数据搜索,并将该用户的所有好友的名称、状态合并为一条命令发送给指定的用户。客户端接收到命令后立刻进行解析,完成对好友的添加及状态更新(利用Wordfunc 模块中的函数)。 3.一个用户登录成功后,服务器会向所有连接在其上的用户(无论该用户处于何种状态)发送一个用户上线状态通知。其它用户接受该通知后根据情况自动决定是否进行更新。 发送/接收信息基本原理 1.当用户点击“发送”按钮或通过其他方式命令客户端发送信息时,客户端将Richtextbox 中的信息代码(TextRTF属性)的开头附加上起始标志(.msg )、在其末尾添加接收用户的名称和结束标志( ||),然后向服务器发送该信息。 2.服务器接收到客户端发出的消息后,根据信息头标志(.msg)判断这是一则聊天信息,同时根据信息结束标志( ||)判断该信息是否完整(若不完整,写入缓冲字符串数组)、获取信息的接收用户。判断完毕后,找到对应用户使用的Servicesocket,向该用户发送信息(若该用户不在线,信息将写入临时文件储存,待该用户上线再发送) ZX Messenger 除文件传送和人模式外,所有通讯均采用这种模式。 3.信息被转发到目标用户后,将再一次进行完整性判断(因为Winsock发送数据包大小受网络情况限制)并对数据进行连接。然后,使用 Word 函数取出有效信息并显示。 Messenger 使用 Microsoft Visual Basic 6.0 开发,(除去各附件)本软件大体分为两个部分——客户端和服务器端(是典型的C/S架构)。其客户端和服务器端依靠Winsock进行通讯(使用TCP/IP 协议),服务器通过建立Winsock控件数组实现多客户端同时连接的支持。Messenger 的消息走向主要采用 客户端发送——服务器中转——客户端接收的模式(个别功能例外)。 ZX Messenger 适用于 Windows 95/98[注]/Me/2000/XP/.Net Server 2003 [注]:本软件只适用于安装了Microsoft Office或其他带有 Microsoft Visual Basic 6.0 运行库 的 Windows 95/98操作系统,对于没有安装 Microsoft Visual Basic 6.0 运行库的WINDOWS 95/98 ,本软件会无法运行,对于这种情况,请下载 Microsoft Visual Basic 6.0 运行库 并安装。Win98 以后的操作系统不存在此问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值