社区
C++ 语言
帖子详情
飞鸽传书的发送消息过程
海中水草
2011-10-24 10:00:21
谁能详细的说一下飞鸽传书中发送消息的详细过程,不是文件传输和广播,谢谢
...全文
105
回复
打赏
收藏
飞鸽传书的发送消息过程
谁能详细的说一下飞鸽传书中发送消息的详细过程,不是文件传输和广播,谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
飞鸽传书
发送
广播和
消息
的
过程
飞鸽传书
第一次
发送
广播和
消息
的详细
过程
,及下线时
发送
广播
过程
飞鸽传书
(IPMessenger) 源码
软件简介
飞鸽传书
(IP Messenger),是由日本人Shirouzu Hiroaki (白水 启章)所发明的免费软件, 是一款局域网内即时通信软件,基于 TCP/IP(UDP)。可运行于多种操作平台(Win/Mac/UNIX/Java),并实现跨平台信息交流。不需要服务器支持, 支持文件/文件夹的传送 (2.00版以上),通讯数据采用 RSA/Blofish 加密 (2.00版以上),十分小巧,简单易用,而且你可以完全免费使用它。目前已有的版本包括: Win32, Win16, MacOS, MacOSX, X11, GTK, GNOME,Java 等, 并且公开源代码. 系统要求 Microsoft Windows 95/98/Me/NT4.0/2000/XP/2003 95/98/NT4.0 ... 要求 comctl32.dll(公共控件) 的版本为 5.x 或更高. (如果你安装的 IE 是 5.x 或更高版本, 那么就不必担心这个问题了) 注意: Windows 3.1(和 NT3.5x), 请使用 IP Messenger for Win16. 使用说明 < 安装/卸载 > 执行 setup.exe 你可以将 IPMsg 安装到指定目录, 或者重新注册到启动组. 如果需要删除 IPMsg, 请先从控制面板中卸载, 再手动删除 IPMsg 目录. < 系统托盘区图标 > 左键双击图标, 即可打开
发送
消息
窗口. 右键点击图标, 可进入 [服务设置], [离开] 等. <
发送
消息
窗口 > -
发送
消息
时, 若勾选了 [封装], 则接收者要先打开信封才能看到
消息
, 如果你还勾选了 [上锁], 则接收者在打开信封时还需要输入密码. (密码是由接收者自己在 [服务设置] 中设置的) - 若要
发送
文件/文件夹, 可直接将文件/文件夹拖入
发送
消息
窗口 或在
发送
消息
窗口上点击右键, 再选择
发送
文件或
发送
文件夹 - 传送文件/文件夹时, 当接收者还没有保存(下载)文件/文件夹时, 若
发送
者关闭或重启了 IPMsg, 则附带的文件信息将被清除, 接收者将不能继续接收(下载)到此文件. - 用户列表前缀符号说明 ":" 表示用户处于离开模式. "|" 表示用户使用的不是 2.0 以上版本的 IPMsg, 将不支持文件/文件夹的传送, 并且不支持通信数据加密. "|"(短线) 表示只支持文件/文件夹的传送. - 拖动列表表头标题项可改变其顺序, 并可点击右键选择"保存列表顺序" - 在
消息
输入窗口中, 可使用 Ctrl+Tab 输入制表符 Tab. - 在
发送
消息
窗口上点击右键, 可以进入设置显示优先级, 选择工作组, 搜索用户(Ctrl+F), 传送文件, 传送文件夹, 保存列表顺序, 字体设置, 窗口大小设置, 固定窗口位置, 列表显示设置. - 在用户名上点击右键, 可设置其显示优先级 优先级按由小到大的顺序排序 - 通过设置显示优先级, 可将经常联系的用户至于列表顶端, 或者隐藏不需要联系的用户 < 接收
消息
窗口 > - 在接收
消息
窗口上点击右键, 可以进入字体设置, 窗口大小设置, 固定窗口位置. - 接收
消息
窗口标题栏中的 "+" 或 "-" 表示通信数据使用了加密算法 "+" 表示 RSA/1024 位, blowfish/128 位加密 "-" 表示 RSA/512 位, RC2/40 位加密 - 如果你收到的
消息
附带了文件, 将会显示出附件按钮. 点击按钮即可保存文件. < 其他 > - 如果需要(通过路由器)连接到广域网, 则需要设置广播地址. 详见广域网设置(广播设置) - 其它功能都很容易理解, 你试一试就明白了 操作技巧 1、隐藏/显示窗口Ctrl+D 2、按住Ctrl键再点[刷新]可保持现有用户,搜索新上线的用户 3、打开
发送
/接收
消息
窗口Ctrl+Alt+S/R(需要进行详细设置) 4、打开搜索窗口Ctrl+F 5、接收到多个文件,保存时可勾选[全部] 软件原理 局域网聊天软件
飞鸽传书
是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。 因为 FreeEIM 的实现原理和
飞鸽传书
差不多,希望广大用户了解其原理后,在使用时更加得心应手。 开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(
飞鸽传书
),前几天,详细的了解了FreeEIM(
飞鸽传书
)的网络协议,详细分析并且实现了FreeEIM(
飞鸽传书
)的
消息
传递
过程
,这里就FreeEIM(
飞鸽传书
)中的文件和文件夹的传输做详细的说明。 在FreeEIM(
飞鸽传书
)中,如果要进行文件或者文件夹的传输,首先需要做的就是
消息
的应答,通过UDP
发送
文件传输报文,另外的FreeEIM(
飞鸽传书
)客户端收到报文后,使用TCP协议
发送
应答报文,这样就开始进行文件的传输了。 这里开启两个线程,线程1负责文件的传送,线程2负责文件的接受,下边做一一说明。 首先,我们知道,可以
发送
多个文件,这些文件需要建立链表保存信息。 typedef struct file_info { struct file_info *next; //双向链表 struct file_info *forward; char *file; //文件名 int type; //文件类型:文件或者文件夹 int size; //文件大小 struct sockaddr_in addr; //目标网络信息 } FILE_INFO; [1]文件传送链表由专门的线程维护,这样,线程1就可以专心进行处理文件传输队列就可以了,线程1始终查询这个链表,如果表头为NULL,就说明没有要传输的文件,表头非空,就开始
发送
报文,获得正确的应答后,就可以开始文件的传输了,文件传输结束,将相应的链表节点删除。这里借鉴了很多程序中使用非常广泛的“命名池”相关的概念,只不过这里我们使用的是“文件池”,可以这么认为,如果有文件要传输,可以不用考虑是否有文件正在传输,只要把要传输的文件放入 “文件池”就可以了 , 同时,不用考虑“文件池”的大小,线程1是文件池的服务线程,它检测文件池的大小,如果非空,就会逐次传输文件。 这里需要特别注意的就是关于文件夹的传输,这个FreeEIM(
飞鸽传书
)一个难点,应为对与文件夹的内容是没有显示的,需要我们逐次的判断,在
飞鸽传书
中是这么处理的,如果是一个文件夹,就
发送
文件属性为IPMSG_FILE_DIR的信息包,FreeEIM(
飞鸽传书
)客户端收到这个信息包后,就创建这个文件夹,然后发起
发送
的FreeEIM(
飞鸽传书
)客户端,进入文件夹,传送文件夹内的文件,如果该文件夹下,还有文件夹,使用相同的方法,在文件夹内的文件传送结束后,就
发送
FREEEIM_FILE_RETPARENT信息包,接受的FREEEI_FILE_RETP报文的FreeEIM(
飞鸽传书
)客户端,执行返回上一级目录,FreeEIM(
飞鸽传书
)
发送
端,就需
发送
目录下的文件。这样循环操作,最终完成文件的传输,这个
过程
比较难以理解。 有了上边的知识,开发文件传输功能就变得简单多了,文件的接受也可以类推了,同样开启一个线程维护接受文件链表,逐次接受身下的文件,链表为空时。文件传输会遇到文件读写问题,有的文件
发送
是被打开了,这样会造成访问违规,所以要有相应的处理,才能让程序更加稳健。 程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播
消息
给整个局域网
发送
一个数据包,这时候,如果其他电脑已经运行了
飞鸽传书
,那么他收到这个包后,会将包的信息读取出来,当然,这个包里有用户的IP,用户名,性别等等。这样,在用户列表里就多了一个用户了。他的用户检查方式就如此简单而已。至于跨网段的实现,只需简单地修改一下广播地址就行了,如果不考虑速度,你可以给整个internet发广播
消息
。
消息
发送
,文件传输这些功能,都比较简单,如果你会网络编程,给你对方IP地址,这些功能实现起来再简单不过了。语音、视屏等,只需编写一些语音视频采集代码,传书的话,就像传文件一样。这里给段广播
消息
的实现代码吧: //
发送
广播登陆
消息
void EM_UserLogin::SendLogin_BC(LPEM_DATA msg) { SOCKET m_socket; m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP); if (INVALID_SOCKET == m_socket) { MessageBox(0, "socket failed.", NULL, MB_OK); } SOCKADDR_IN sin;sin.sin_addr.s_addr = htonl(INADDR_BROADCAST); sin.sin_family = AF_INET; sin.sin_port = htons(BROADCAST_SEND_PORT);BOOL bOpt = TRUE; if (SOCKET_ERROR == setsockopt(m_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt))) { // Error occurred ::MessageBox(0,"BC setsockopt error.",0,0); return; } char *tmpBuf = msg->GetBuffer(); if (SOCKET_ERROR == sendto(m_socket, tmpBuf, msg->GetLength(), 0, (PSOCKADDR)&sin, sizeof(sin))) { // Error occurred ::MessageBox(0,"BC sendto error.",0,0); return; }closesocket(m_socket); 相关信息 - 所有的设置信息都保存在注册表的以下位置: \\HKEY_CURRENT_USER\Software\HSTools\ 用户密码以不可逆加密方式存储. ******************************************************************* * 如果你忘记了密码, 可以在注册表中将此键值删除 * * \\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr * ******************************************************************* - 本软件使用的默认端口为 2425 若仅使用 UDP 协议的端口, 将不能传送文件/文件夹 (如果安装了防火墙, 则必须打开相应的 TCP 和 UDP 端口) - 本软件为自由软件, 你可以随意传播, 但源码使用请参见许可协议. - 只有在启动或退出程序, 使用离开模式, 刷新在线用户时 IPMsg 才会进行
消息
广播. - 本软件由 Microsoft Visual C++ 6.0 编译 广域网设置(广播设置) - 主机号全部为 1 的 IP 地址, 即广播地址 例如, 连接到一个 C 类子网(即 24 位网络号, 8 位主机号), IP 地址为 aaa.bbb.ccc.ddd, 其广播地址即为: aaa.bbb.ccc.255 若对方处于另一个私有子网中, 广播可能无效. - 更多问题, 请参阅相关资料或咨询你的网络管理员. - 若两台主机的连接经过了多个路由器, 请直接指定对方IP地址 - 拨号上网用户请勾选 [拨号连接] 当刷新在线用户列表时, 列表不会被清空 补充 - 启动
飞鸽传书
前, 你可以指定其运行时使用的端口, 且可以使用不同的端口打开多个窗口. 用法如下: ipmsg.exe 2426 (你可在快捷方式上设置) 但是你只能与同时也使用该端口的用户通信. - 所以你尽可选用你喜欢的端口运行本软件. 介于 10000 至 60000 可能更安全些. 你也可以咨询你的网络管理员. - 如果有多个网卡(IP), 你可以将
飞鸽传书
与指定的网卡(IP)进行绑定. 命令格式如下(你可以在快捷方式上设置): ipmsg.exe [端口] /NIC IP地址 例如: C:\>ipmsg.exe /NIC 192.168.10.100 - 支持命令方式
发送
消息
命令格式如下: ipmsg.exe [端口] /MSG [/LOG][/SEAL] <主机名或IP地址> <
消息
> 例如: C:\>ipmsg.exe /MSG /SEAL localhost Hello. 支持 - IPMsg 的技术讨论区是开放的. 如果你想订阅相关邮件, 请联系 ipmsg-subscribe@ring.gr.jp - 欢迎报告 bug, 以及提出建议 - 如果你有任何疑问, 请 E-mail 联系. shirouzu@h.email.ne.jp 中文版可联系阿志: hiwyz@163.net -
发送
错误报告, 请勿必记录以下信息: 软件版本, 操作系统, 故障描述, 以及故障重现方法等. 更新历史 ver 1.00 ... 日文版 (1996/08/19) ver 1.31 ... 英文版/日文版 (1997/09/01) ver 2.00 ... 英文版/日文版 (2002/11/19) 支持文件/文件夹传送 支持通信数据加密 ver 2.03 ... Bug 修正 (文件传送引起缓冲溢出) 广播设置支持主机地址(FQDN)解析 ver 2.04 ... 增加绑定网卡(IP)功能 ver 2.05 ... Bug 修正 (2.04版当激活
发送
/接收
消息
窗口时,无法注销/关闭系统) ver 2.06 ... 很小的调整 ver 2007 ... 全面调整软件的界面可用性、性能稳定性 注意:本版本为 IPMSG 2.06版 编译环境: WINXP & VS2005, 可正确编译。
飞鸽传书
源代码 Visual C++版
局域网聊天软件
飞鸽传书
是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。 因为 FreeEIM 的实现原理和
飞鸽传书
差不多,希望广大用户了解其原理后,在使用时更加得心应手。 开发多年的飞鸽,在他的基础上增加了些许功能,例如语音对话,这里继续讨论FreeEIM(
飞鸽传书
),前几天,详细的了解了FreeEIM(
飞鸽传书
)的网络协议,详细分析并且实现了FreeEIM(
飞鸽传书
)的
消息
传递
过程
,这里就FreeEIM(
飞鸽传书
)中的文件和文件夹的传输做详细的说明。 在FreeEIM(
飞鸽传书
)中,如果要进行文件或者文件夹的传输,首先需要做的就是
消息
的应答,通过UDP
发送
文件传输报文,另外的FreeEIM(
飞鸽传书
)客户端收到报文后,使用TCP协议
发送
应答报文,这样就开始进行文件的传输了。
IPMsg(
飞鸽传书
)文件
发送
源码分析
细致的分析了日本人写的IPMsg(
飞鸽传书
)文件
发送
过程
手机版
飞鸽传书
(2):PC版
【中文名】无线牵 【英文名】Wireless Linker 【组成】PC端(PC版)WirelessLinker-PC.jar、Mobile端(手机版)WirelessLinker.jar 【作者】火种工作室(Tinder Studio) 【邮箱】tinderstudio@163.com 【使用注意】 1、本软件使用J2ME开发,使用前请确认你的手机支持JSR75; 2、在传输文件给Mobile端时,请注意文件后缀,经本人在Nokia 5800上测试发现一些后缀是禁止传输的, 所以传输前请先将后缀改为可用的后缀,如jpg,mp3等,然后再进行传输; 3、本软件在基于进行使用的,即手机版的使用是基于WLAN,所以请在使用前确认你的旁边局域网通讯的条件。 4、本软件不具备Nokia对一些特殊功能使用时应有的签名和证书,所以在使用
过程
会出现一些提示询问 用户确认,均是Nokia的认证机制所致,不便之处,敬请谅解; 5、因为条件限制,本软件只在Nokia 5800真机上测试过,对于其他手机用户可自行尝试,如果不能使用只要 卸载即可,不会残留信息。 6、因为本人能力有限,如果在使用
过程
中遇到异常的情况,希望您能多多提供意见和建议(联系方式请见 上文),本人在此谢过。 【版本】1.0 【功能说明】 1、显示局域网用户IP列表 2、局域网
发送
接收文件传输并支持文件覆盖 3、文件传输带进度条显示 4、支持PC-PC、PC-Mobile、Moblie-Mobile的文件传输
C++ 语言
64,637
社区成员
250,559
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章