飞秋的实现原理
2012-05-14 13:15:09| 分类: Windows 开发 |举报|字号 订阅
转自:hi.baidu/ma_se/blog/create
(1)最关键的是局域网用户列表的建立;飞秋启动时使用UDP协议向255.255.255.255这个广播地址发送广播包,默认端口是2425。广播包内容包含用户名、工作组、主机名、IP等信息;
已启动飞秋的用户通过2425端口收到此广播包后,就会在自己的用户列表中添加这个用户的用户名、工作组等信息,同时向对方IP发送本机用户的个人信息;从而双方都能建立起用户列表;
(2)刷新用户列表时发送的广播包和启动时差不多,只不过返回的标识信息略有不同;可以做一个小工具,监控2425端口内存流,就能截获刷新和聊天时的消息。
(3)传送聊天信息时同样使用UDP协议;由于UDP协议是无连接协议,传输速度快,但是没有确认机制,是不可靠的协议,需要自己定义返回信息的标志来判断对方是否收到信息;
(4)用户离线时发送一个离线广播包到255.255.255.255,收到此广播包的用户,根据包中的IP地址(也可能是多种判断标志或者包含硬件标识,比如网卡地址等)删除对方的用户列表信息;
(5)广域网无法直接使用广播方式,靠手工添加”局域网外广播列表”来建立相互的关系;
(6)飞秋传送文件是使用TCP协议,端口2425;
其他一些资料:
1.飞秋使用C++语言,开发工具:Visual C++ 4.1, 6.0, or later;
2.飞秋公开源码,在作者(来自日本广岛的白水启章)和者(阿志)网站下载源码,源码注释为日文;可以使用VC++修改、编译;
3.飞秋传书是来自日本的软件,日文版是它的第一版本;此外还有中文,英文,韩文,葡萄牙文等语言;
4.飞秋使用的加密算法:RSA、Blowfish、RC;
5.飞秋可以使用命令行方式发送信息,命令格式如下:
ipmsg [端口] /MSG [/LOG][/SEAL] <;主机名或IP地址> <;消息>
可以使用IPMsg [端口] 命令改变默认端口,并同时启动多个实例,但是修改后只有使用相同端口的用
户才能收到相互的信息;
6.飞秋非安装版,并不是纯绿软件,直接删除会在注册表留下垃圾键值;
* 飞秋把所有设置信息都保存在注册表的以下位置:
用户密码以不可逆加密方式存储.
* 如果你忘记了密码, 可以在注册表中将此键值删除,清除密码*\\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr
7.飞秋一次传送文件数达到几千个时,有丢失文件的可能,怀疑是飞秋的一个bug,而传输大文件则没有问题;
8.飞秋最稳定的正式版本是V2.06;目前v2.50 alpha6 版正在测试,尚未正式发布;其他如2.71,2007绿版为修改版本,并非正版;
9.飞秋支
持的字符太少,需要补充一下。
浅谈飞鸽传书实现原理
2009-12-05 16:57:21| 分类: 飞鸽传书 |举报|字号 订阅
免费源码下载网站有哪些局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。
因为 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);
}
我们要向QQ、MSN、ICQ、AIM等大型即时通讯看齐,和他们对比,XEIM只是班级里面的一个差生,要赶得上这些优秀的同学,只有付出更大的努力才有可能追上甚至超赶他们。但是,你什么也不做,这会变成一个笑话。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论