浅谈飞鸽传书实现原理

freeeim 2008-11-04 07:31:19
局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。
因为 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只是班级里面的一个差生,要赶得上这些优秀的同学,只有付出更大的努力才有可能追上甚至超赶他们。但是,你什么也不做,这会变成一个笑话。
...全文
1529 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluecomputer 2008-12-01
  • 打赏
  • 举报
回复
要做个课程设计,是这个方面的,多谢楼主分享自己的知识了!
小发猫 2008-11-25
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 WinEggDrop 的回复:]
引用楼主 freeeim 的帖子:
局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。
因为 FreeEIM 的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。
程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信…
[/Quote]

非常有趣,呵呵,我说的是在局域网广播,在全世界广播的话,有点像笑话。
WinEggDrop 2008-11-18
  • 打赏
  • 举报
回复
[Quote=引用楼主 freeeim 的帖子:]
局域网聊天软件飞鸽传书是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。
因为 FreeEIM 的实现原理和飞鸽传书差不多,希望广大用户了解其原理后,在使用时更加得心应手。
程序启动时先读取用户配置文件,一般是"*.ini"格式,然后,使用Winsock的广播消息给整个局域网发送一个数据包,这时候,如果其他电脑已经运行了飞鸽传书,那么他收到这个包后,会将包的信息读取出来,当然,这个包里…
[/Quote]

跨网段广播,你想说的是大家在不同局部网广播,还是在internet中广播?如果internet中能广播,那你广播一个消息,岂不是全世界在线的机子能都收到?如果这样也可有,那么这网络估计就是每一秒都被攻击了,因为随便广播个消息,就全世界能收到.
yanjing_mail 2008-11-18
  • 打赏
  • 举报
回复
mark
liuhao159753 2008-11-18
  • 打赏
  • 举报
回复
学习了
etz2008 2008-11-17
  • 打赏
  • 举报
回复
正在研究这个东西
局域网广播问题
sept80 2008-11-15
  • 打赏
  • 举报
回复
关注 学习
achao9527 2008-11-15
  • 打赏
  • 举报
回复
哇塞。学习了。可否给初学者一个示范的代码?
blackcat242 2008-11-14
  • 打赏
  • 举报
回复
局域网里面,应该都比较块
shuilongjian 2008-11-14
  • 打赏
  • 举报
回复
没有说出传输速度快的原理,只是泛泛之谈.
scq2099yt 2008-11-05
  • 打赏
  • 举报
回复
呵呵,我也在研究IM
wh608 2008-11-05
  • 打赏
  • 举报
回复
很好,支持下
lang528 2008-11-04
  • 打赏
  • 举报
回复
谢谢啊,学习了.
dch4890164 2008-11-04
  • 打赏
  • 举报
回复
关注

18,364

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧