开发工具:
文件大小: 729kb
下载次数: 0
上传时间: 2012-11-14
详细说明: 局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。因为FreeEIM的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。 开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(飞鸽传书),前几天,详细的了解了FreeEIM(飞鸽传书)的网络协议,详细分析并且实现了FreeEIM(飞鸽传书)的消息传递过程,这里就FreeEIM(飞鸽传书)中的文件和文件夹的传输做详细的说明。 在FreeEIM(飞鸽传书)中,如果要进行文件或者文件夹的传输,首先需要做的就是消息的应答,通过UDP发送文件传输报文,另外的FreeEIM(飞鸽传书)客户端收到报文后,使用TCP协议发送应答报文,这样就开始进行文件的传输了。 这里开启两个线程,线程1负责文件的传送,线程2负责文件的接受,下边做一一说明。 首先,我们知道,可以发送多个文件,这些文件需要建立链表保存信息。 typedefstructfile_info structfile_info*next;//双向链表 structfile_info*forward; char*file;//文件名 inttype;//文件类型:文件或者文件夹 intsize;//文件大小 structsockaddr_inaddr,//目标网络信息 }FILE_INFO; 文件传送链表由专门的线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输的文件,表头非空,就开始发送报文,获得正确的应答后,就可以开始文件的传输了,文件传输结束,将相应的链表节点删除。这里借鉴了很多程序中使用非常广泛的“命名池”相关的概念,只不过这里我们使用的是“文件池”,可以这么认为,如果有文件要传输,可以不用考虑是否有文件正在传输,只要把要传输的文件放入“文件池”就可以了,同时,不用考虑“文件池”的大小,线程1是文件池的服务线程,它检测文件池的大小,如果非空,就会逐次传输文件。 这里需要特别注意的就是关于文件夹的传输,这个FreeEIM(飞鸽传书)一个难点,因为对于文件夹的内容是没有显示的,需要我们逐次的判断,在飞鸽传书中是这么处理的,如果是一个文件夹,就发送文件属性为IPMSG_FILE_DIR的信息包,FreeEIM(飞鸽传书)客户端收到这个信息包后,就创建这个文件夹,然后发起发送的FreeEIM(飞鸽传书)客户端,进入文件夹,传送文件夹内的文件,如果该文件夹下,还有文件夹,使用相同的方法,在文件夹内的文件传送结束后,就发送FREEEIM_FILE_RETPARENT信息包,接受的FREEEI_FILE_RETP报文的FreeEIM(飞鸽传书)客户端,执行返回上一级目录,FreeEIM(飞鸽传书)发送端,就需发送目录下的文件。这样循环操作,最终完成文件的传输,这个过程比较难以理解。 有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空时。文件传输会遇到文件读写问题,有的文件发送是被打开了,这样会造成访问违规,所以要有相应的处理,才能让程序更加稳健。 程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信息读取出来,当然,这个包里有用户的IP,用户名,性别等等。这样,在用户列表里就多了一个用户了。他的用户检查方式就如此简单而已。至于跨网段的实现,只需简单地修改一下广播地址就行了,如果不考虑速度,用户可以给整个internet发广播消息。消息发送,文件传输这些功能,都比较简单,如果用户会网络编程,给用户对方IP地址,这些功能实现起来再简单不过了。语音、视屏等,只需编写一些语音视频采集代码,传书的话,就像传文件一样;这里给段广播消息的实现代码吧: //发送广播登陆消息 相关信息 所有的设置信息都保存在注册表的以下位置: \\HKEY_CURRENT_USER\Software\HSTools\ 用户密码以不可逆加密方式存储 ******************************************************************* *如果用户忘记了密码,可以在注册表中将此键值删除* *\\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr* ******************************************************************* -本软件使用的默认端口为2425 若仅使用UDP协议的端口,将不能传送文件/文件夹 (如果安装了防火墙,则必须打开相应的TCP和UDP端口) -本软件为自由软件,用户可以随意传播,但源码使用请参见许可协议。 -只有在启动或退出程序,使用离开模式,刷新在线用户时IPMsg才会进行消息广播。 -本软件由MicrosoftVisualC++6.0编译 广域网设置 -主机号全部为1的IP地址,即广播地址 例如,连接到一个C类子网(即24位网络号,8位主机号),IP地址为 aaa.bbb.ccc.ddd,其广播地址即为:aaa.bbb.ccc.255 若对方处于另一个私有子网中,广播可能无效。 -更多问题,请参阅相关资料或咨询用户的网络管理员. -若两台主机的连接经过了多个路由器,请直接指定对方IP地址 -拨号上网用户请勾选[拨号连接] 当刷新在线用户列表时,列表不会被清空。 补充 启动飞鸽传书前,用户可以指定其运行时使用的端口, 且可以使用不同的端口打开多个窗口.用法如下: ipmsg.exe2426(用户可在快捷方式上设置) 但是用户只能与同时也使用该端口的用户通信. -所以用户尽可选用用户喜欢的端口运行本软件. 介于10000至60000可能更安全些. 用户也可以咨询用户的网络管理员. 如果有多个网卡(IP),用户可以将飞鸽传书与指定的网卡(IP)进行绑定。 命令格式如下(用户可以在快捷方式上设置): ipmsg.exe[端口]/NICIP地址 例如:C:\>ipmsg.exe/NIC192.168.10.100;支持命令方式发送消息 命令格式如下 ipmsg.exe[端口]/MSG[/LOG][/SEAL]<主机名或IP地址><消息> 例如:C:\>ipmsg.exe/MSG/SEALlocalhostHello。 支持 -IPMsg的技术讨论区是开放的. 如果用户想订阅相关邮件,请联系 -欢迎报告bug,以及提出建议 -如果用户有任何疑问,请E-mail联系. 中文版可联系阿志 -发送错误报告,请勿必记录以下信息: 软件版本,操作系统,故障描述,以及故障重现方法等。 更新历史 ver1.00——日文版(1996/08/19) ver1.31——英文版/日文版(1997/09/01) ver2.00——英文版/日文版(2002/11/19) 支持文件/文件夹传送 支持通信数据加密 ver2.03——Bug修正(文件传送引起缓冲溢出) 广播设置支持主机地址(FQDN)解析 ver2.04——增加绑定网卡(IP)功能 ver2.05——Bug修正(2.04版当激活发送/接收消息窗口时,无法注销/关闭系统) ver2.06——很小的调整 ver2007——全面调整软件的界面可用性、性能稳定性。 ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.