LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

飞鸽传书原理以及相关代码详解

admin
2016年12月23日 18:31 本文热度 6077

飞鸽传书的实现原理: 

(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)      步骤一主要代码解析如下:

voidlogin(int sockfd,char *user, char *host)

{

   char buf[200]="";

   struct sockaddr_in addr={AF_INET};

   addr.sin_addr.s_addr=inet_addr("192.168.1.255");//自己的主机ip地址

   addr.sin_port = htons(2425);

   sprintf(buf,"1:%d:%s:%s:%d:%s",time(NULL),user,host,IPMSG_BR_ENTRY,user);

   sendto(sockfd, buf, strlen(buf),0,(structsockaddr*)&addr, sizeof(addr));

}

启动飞鸽传书的时候要广播发送udp消息。

 

(2)      步骤二

   if((tcp_fd = socket(AF_INET, SOCK_STREAM,0))<0)

   {

            perror("create udp");

            exit(1);

   }

   if(bind(tcp_fd, (struct sockaddr*)&addr,sizeof(addr))!=0)

   {

            perror("bind tcp");

            exit(1);

   }

   listen(tcp_fd, 10);

启动tcp监听其他用户发来的消息

#defineIPMSG_BR_ENTRY                           0x00000001UL

#defineIPMSG_BR_EXIT                      0x00000002UL

#defineIPMSG_ANSENTRY                           0x00000003UL

#define IPMSG_BR_ABSENCE             0x00000004UL

 

udp消息类型标志位,根据收到消息的类型做出不同的操作。

1:IPMSG_BR_ENTRY 新用户登录标志,回馈本机信息

                               add_usr(temp[2],temp[3],inet_ntoa(addr.sin_addr));

                               sprintf(buf,"1:%d:%s:%s:%d:%s",time(NULL),user(),host(),IPMSG_ANSENTRY,user());

                               sendto(udp_fd,buf, strlen(buf),0,(struct sockaddr*)&addr,sizeof(addr));

2:IPMSG_BR_EXIT 用户下线通知,在本机中删除用户

del_usr(inet_ntoa(addr.sin_addr));

3:IPMSG_ANSENTRY 用户回应登录信息,添加用户就好

add_usr(temp[2],temp[3],inet_ntoa(addr.sin_addr));     

4:IPMSG_BR_ABSENCE 收到用户发来消息,读取消息内容收取文件或者发文件。


该文章在 2016/12/23 18:31:37 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved