1.使用TCP/UDP端口(默认端口为2425),消息的收发使用UDP协议,文件(文件夹)的收发使用TCP协议。
2.有一点可以确定.命令字和选项位可以唯一的确定一个编码.应该还是以命令字为主.
3.使用IPMSG_SENDMSG命令发送消息,消息内容添加在附加信息中;在接收消息时,如果对方要求回信确认(IPMSG_SENDCHECKOPT位打开),则需
发送IPMSG_RECVMSG命令并将对方发送的数据包的编号放在附加信息中一同发送至发送消息方.
4.带有IPMSG_FILEATTACHOPT位的IPMSG_SENDMSG命令可用来传输文件,文件属性及内容添加在附加信息中,文件内容添加在消息内容后并以’\0
’与之分隔开。
5.在传输文件时,文件大小、最后修改时间和文件属性为十六进制数,如果文件名中包含’:’则使用“::”代替.
6.IPmsg UDP数据包格式:
1 程序版本号
2 数据包序列号
3 用户名
4 主机名
5 命令
6 消息内容
7 额外数据
1到5的内容是以“:”为分隔符,消息和额外数据以数据“0“分隔.(字符0).
7.IPmsg发送文件的整个逻辑过程:
1.发送端发送一个UDP数据包,通知接收端准备接收文件,通知在一个socket上监听TCP连接事件
2.接收端回发一个UDP数据包,告诉发送端已准备好接收数据,并请求一个TCP的连接
3.发送端接收连接的请求,并将文件映射到内存中,然后创建发送文件线程,开始进行数据的发送
4.接收端创建接收的文件,然后创建接收数据的线程,开始收取数据.接受完以后,将数据写入到创建好的文件中.
8.协议可以让运行于两个不同平台的程序之间做到“心有灵犀一点通”,也有点像黑帮内部的切口:A说了天王盖地虎,B就要说宝塔镇荷妖。
9.飞鸽的协议也属于应用层协议,它描述了飞鸽程序通信时的语法和语义。
其语法定义如下(所有的命令字,都必需符合这样的格式要求):
Ver(1): PacketNo:SenderName:SenderHost:CommandNo:AdditionalSection
每部分分别对应为:版本号(现在是1):数据包编号:发送主机:命令:附加数据.
10.登录/离线通知
登录过程需要实现向局域网内的用户广播,告诉他们,“我来也!”。收到这条消息的用户则立即回复,“知道了,我在这里”,同时将新
登录的用户加入到用户列表中。发送方也可根据收到的回复信息,了解到当前网络中,都有哪些已经登录了的用户。
具体的数据包如下:
登录方(要发送到广播地址,如255.255.255.255):
1:XXX:m8:<主机名称>:IPMSG_BR_ENTRY:
接收方回复(发送到发送方的IP地址):
1:XXX:<接收方主机名>:IPMSG_ANSENTRY:

相应的,用户离线时,应向广播地址发送“我去也!”,收到这条消息的用户,需要将发送方从自己的用户列表中移除,并且不需要回复。
具体的数据包如下:
即将离线用户:
1:XXX:m8:<主机名称>:IPMSG_BR_EXIT:
11.发送/接收消息
发送消息是飞鸽协议中最重要的部分,通过和一些命令选项,可以实现复杂的功能:
最基本的情况下,发送方通过 IPMSG_SEND_MSG 命令,可以将消息发送到接收方
1:12345:m8:<主机名称>:IPMSG_SEND_MSG:你好,飞鸽
使用命令时,“附加数据”开使发挥作用了它里面包含了要发送的消息。
通常情况下,由于UDP的不可靠性,还需要为 IPMSG_SEND_MSG 命令设定 IPMSG_SENDCHECKOPT选项,也就是要求接收方回复回执信息。
1:12345:m8:<主机名称>:IPMSG_SEND_MSG|IPMSG_SENDCHECKOPT:你好,飞鸽

接收方收到IPMSG_SEND_MSG时,如果遇到IPMSG_SENDCHECKOPT选项,就要立即回复如下信息:
1:XXX:<用户名>:<主机名>:IPMSG_RECVMSG:12345
IPMSG_RECVMSG命令通过附加数据段中的数据(12345),告诉发送方,我收到了你的编号为12345的消息包。
12.发送/接收文件
文件的传输,要稍微复杂一些,它是通过 IPMSG_SEND_MSG 命令与 IPMSG_FILEATTACHOPT选项的组合,通知接收方“现在有文件要发给你了
”,同时要将一些描述文件属性的数据(如文件名、大小、创建时间、类别属性如文件夹),发送给接收方,具体格式如下:
file1ID:filename:size:mtime:fileattr[:extend-attr=val1[,val2...][:extend-attr2=...]]:\a:file2ID...
这里需要注意的有几点,
第一,一条文件传送命令,可以携带多条文件信息;
第二,多个文件信息之前,要用\a分割;
第三,size, mtime 和fileattr 是用十六进制数描述的);第四,如果文件名中包含“:”,则需要将其转义为“::”。

相应的,接收方收到文件传送命令后,首先需要从文件属性的数据中解析出要接收的文件的属性。然后向发送方相同的端口进行TCP连接,
连接成功后,通过TCP通道向发送方发送IPMSG_GETFILEDATA命令用于接收文件或发送IPMSG_GETDIRFILES命令,用于接收文件夹。
具体接收文件的命令如下:
1:XXX:m8:<主机名>:IPMSG_GETFILEDATA:packetID:fileID : offset
这条命令通过packetID,让发送方明白对方请求的文件是源于哪个命令包;通过fileId让发送方确定要发哪个文件;通过offset;
让发送方明白要从哪个字节开始发送。
发送方的TCP通道收到上面的命令,就会发送对方请求的文件;而接收方将收到的数据保存到磁盘上即可。

转载于:https://www.cnblogs.com/hnrainll/archive/2011/05/08/2040435.html

IPMSG相关知识点相关推荐

  1. 卫星轨道推演计算相关知识点总结(含欧拉角、旋转矩阵、及各坐标系转化等)

    来源:轨道机动算法的C++实现_shirro123的专栏-CSDN博客 卫星轨道推演计算相关基础知识点总结 一.卫星的运动特性             二.卫星的空间坐标系               ...

  2. 水下机器人_相关知识点

    485转232 SP3485的管脚及功能: Pin1.RO    接收器输出 Pin2.RE 接收器输出使能(低电平有效) Pin3.DE 驱动器输出使能(高电平有效) Pin4.DI 驱动器输入 P ...

  3. js 闭包及其相关知识点理解

    本文结合个人学习及实践,对闭包及相关知识点进行总结记录,欢迎读者提出任何不足之处 一.js变量 二.作用域(scope) 三.[[scope]] 和 scope chain 四.作用域(scope)和 ...

  4. Redis:相关知识点纵观

    这篇文章先简单的介绍一下redis有什么相关知识点,然后再从接下去的一些文章对一些重要的知识点进行总结. 一.Redis 是什么 Redis 是速度非常快的非关系型(NoSQL)内存键值数据库,可以存 ...

  5. 网络流量队列优先级相关知识点

    网络流量队列优先级相关知识点 Qdisc(quick disconnect)快速分离,断开;是一种排队规则,实现对流量的优先级管理. 涉及随机公平队列,令牌桶过滤器,分层令牌桶,FIFO, /* *C ...

  6. Linux安装和管理程序的相关知识点

    Linux安装和管理程序的相关知识点 一.Linux应用程序基础 1.应用程序与系统命令的关系 2.典型的应用程序结构 3.常见软件包封装类型 二.RPM软件包管理工具 1.RPM包管理工具 2.RP ...

  7. rem和css3的相关知识点

    ☆☆☆rem和css3的相关知识点☆☆☆ 一. Web front-end development engineer rem是根据页面的根元素的font-size的一个相对的单位,即 html{ fo ...

  8. 一次kafka的offset回退事件及相关知识点

    一次kafka的offset回退事件及相关知识点 原文链接:https://blog.csdn.net/lkforce/article/details/83384747

  9. CSS相关知识点:6种清除浮动和BFC

    文章目录 CSS相关知识点:6种清除浮动和BFC 一.6种清除浮动 1.场景 2.原因 3.清除浮动 (1).给父级设置对应的高度 (2).给父级增加定位absolute (3).将父级也设计成浮动 ...

最新文章

  1. 特斯拉再出车祸,两死一伤,这次是Model S
  2. 用 CentOS 做一个 BGP 路由器
  3. 自定义android控件EditText 自定义边框 背景
  4. mysql全量和增量备份脚本
  5. 互联网到了什么程度?
  6. mvc html传参数乱码,SpringMVC Controller 接收页面传递的中文参数出现乱码
  7. Lua中的操作系统库
  8. 《笨方法学PYTHON》——eighteenthlesson
  9. 两个质数互质是_两个数互质是什么意思 如何判断
  10. 以TFP401A为核心的DVI接口应用系统
  11. ide中tomcat乱码_彻底解决Intellij IDEA中文乱码问题(亲测成功)
  12. 【我的Android进阶之旅】 高效的设计稿标注及测量工具Markman介绍
  13. 全角和半角的区别及使用方式
  14. 筑梦品牌:推动品牌建设致力于打造好中国品牌
  15. 职场人如何提高情商?推荐你看这本书
  16. 靶机17 GROTESQUE: 3.0.1
  17. mysql ssl 2026_解决连接到 Amazon RDS for MySQL 或 Aurora 实例时的 ERROR 2026 SSL 连接错误...
  18. Java程序员兼职平台推荐
  19. vb的学习笔记-if语句
  20. 数组元素作为函数参数

热门文章

  1. python写一个笔记软件_程序员们都用什么记笔记软件?
  2. 黑河学院2021书法高考成绩查询,2021年黑河学院高考录取结果什么时候出来及查询系统入口...
  3. 解决nohup: ignoring input and appending output to 'nohup.out'
  4. ad9850c语言编程,AD9850与单片机波形生成程序及设计
  5. A D 20:基于S T M 32的DDS信号源设计
  6. 练习:二元逻辑回归实现
  7. 没时间学习,学不进去怎么办?
  8. 我的一次java培训经历
  9. 这个大概就是,程序员转行天花板了吧...
  10. Nginx+Keepalived高可用集群应用实践