浅谈飞鸽传书实现原理

    局域网聊天软件是目前比较流行的局域网即时通讯软件,由于历史悠久,它具有比较多的用户。
    因为 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只是班级里面的一个差生,要赶得上这些优秀的同学,只有付出更大的努力才有可能追上甚至超赶他们。但是,你什么也不做,这会变成一个笑话。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值