飞鸽传输协议分析:
IPmsg UDP数据包格式:
1程序版本号
2数据包序列号
3用户名
4主机名
5命令
6消息内容
7额外数据
1到5的内容是以“:”为分隔符,消息和额外数据以数据“0“分隔.(字符0).
IPmsg发送文件的整个逻辑过程:
1.发送端发送一个UDP数据包,通知接收端准备接收文件,通知在一个socket上监听TCP连接事件
2.接收端回发一个UDP数据包,告诉发送端已准备好接收数据,并请求一个TCP的连接
3.发送端接收连接的请求,并将文件映射到内存中,然后创建发送文件线程,开始进行数据的发送
4.接收端创建接收的文件,然后创建接收数据的线程,开始收取数据.接受完以后,将数据写入到创建好的文件中.
飞鸽的协议也属于应用层协议,它描述了飞鸽程序通信时的语法和语义。
其语法定义如下(所有的命令字,都必需符合这样的格式要求):
Ver(1): PacketNo:SenderName:SenderHost:CommandNo:AdditionalSection
每部分分别对应为:版本号(现在是1):数据包编号:发送主机:命令:附加数据.
1、 登陆
发送协议格式:1:1293954630626:localhost:localhost:3:user
接收协议格式:1:1293954630626:localhost:localhost:3:user
2、 消息传输:
发送协议格式:1:1293954779744:localhost:localhost:32:hello(发送hello消息)
接收协议格式: 1:1340069361:IPMSG_ANDROID:IPMSG_ANDROID:288:how are you(接收how are you消息)
3、 发送文件:
请求发送文件格式:
1:1293954963350:localhost:localhost:2097440:��0:music.mp3:b5f7f7:137a7875fc0:1:��
4、 发送文件夹:
然后遍历该文件夹里的文件,如果是文件,则发送,如果是文件夹,则进入文件夹,继续第归遍历,直到该文件夹里的文件全部发送完,再发送一个”.”来表示跳出该文件夹.
格式:
字符串长度:文件名:文件大小:文件类型(1、文件 2、文件夹 3、跳出文件):文件创建时间:文件最后修改时间:
例子:
0033:documents:000000000:2:14=4fe01d24:16=4fe01d24:(先发送一个文件夹documents)
0036:Sample Files:000000000:2:14=4fe01d24:16=4fe01d24(发送文件夹 Sample Files)
003d:ACME Sales Numbers.xls:015400:1:14=4fe01d24:16=4fe01d24(发送文件ACME Sales Numbers.xls )
003f:ACME Quote-Word 2007.docx:0add9:1:14=4fe01d24:16=4fe01d24(发送文件ACME Quote-Word 2007.docx)
003f:ACME Quote-Word 2003.doc:011600:1:14=4fe01d24:16=4fe01d24: (发送文件ACME Quote-Word 2003.doc)
003d:ACME Presentation.pptx:01dff6:1:14=4fe01d24:16=4fe01d24: (发送文件ACME Presentation.pptx)
003e:ACME Expense Report.xlsx:04389:1:14=4fe01d24:16=4fe01d24: (发送文件ACME Expense Report.xlsx)
002b:.:000000000:3:14=4fe01d24:16=4fe01d24:(跳出文件夹 Sample Files)
002b:.:000000000:3:14=4fe01d24:16=4fe01d24:(跳出文件夹documents)
接收文件夹 格式相同