IPMSG相关知识点
生活随笔
收集整理的這篇文章主要介紹了
IPMSG相关知识点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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通道收到上面的命令,就會發送對方請求的文件;而接收方將收到的數據保存到磁盤上即可。
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相关知识点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外链优化技巧之网站如何正确发外链?
- 下一篇: 千兆网线线序