IPMSG飞鸽传书3——协议翻译
最近看到一些朋友在編寫網(wǎng)絡(luò)程序是遇到一些問題,故把以前做IPMSG時(shí)翻譯的文檔貼過來,希望對(duì)網(wǎng)絡(luò)編程新手有所幫助,在尋找編程項(xiàng)目的同學(xué)們也可參照此文檔寫出自己的IPMSG。
本文只包含其中幾個(gè)比較重要的命令以及運(yùn)行機(jī)制的中文翻譯,更詳細(xì)的內(nèi)容請(qǐng)參照文后的IPMSG 協(xié)議英文文檔
聲明:下述協(xié)議內(nèi)容略去了一些在編寫程序過程中沒有用到協(xié)議內(nèi)容,最初的Ipmsg協(xié)議是用日文寫的,下面協(xié)議內(nèi)容由本人(cugb_cat)翻譯自Mr.Kanazawa的英文文檔。本翻譯文檔可任意傳播和使用。
IP信使傳輸協(xié)議(第9版草案)? ?? ? 1996/02/21
2013/01/14 修訂
H.Shirouzu
shirouzu@h.email.ne.jp
飛鴿傳書官方網(wǎng)站?http://www.wzszf.com
?
關(guān)于IP信使:
IP信使使用TCP/UDP協(xié)議提供收發(fā)消息及文件(目錄)。
特性:
IP信使能夠安裝在任何一個(gè)安裝了TCP/IP協(xié)議棧的操作系統(tǒng)上,使用在線用戶的動(dòng)態(tài)識(shí)別機(jī)制,可以和在線所有用戶進(jìn)行信息交換。
運(yùn)行機(jī)制介紹:
使用TCP/UDP端口(默認(rèn)端口為2425),消息的收發(fā)使用UDP協(xié)議,文件(文件夾)的收發(fā)使用TCP協(xié)議。
1、 命令字:
1) 基本命令字(32位命令字的低8位)
IPMSG_NOOPERATION? ???不進(jìn)行任何操作
IPMSG_BR_ENTRY? ???用戶上線
IPMSG_BR_EXIT? ?? ? 用戶退出
IPMSG_ANSENTRY? ???通報(bào)在線
IPMSG_SENDMSG? ?? ? 發(fā)送消息
IPMSG_RECVMSG? ?? ? 通報(bào)收到消息
IPMSG_GETFILEDATA? ???請(qǐng)求通過TCP傳輸文件
IPMSG_RELEASEFILES 停止接收文件
IPMSG_GETDIRFILES? ???請(qǐng)求傳輸文件夾
2) 選項(xiàng)位(32位命令字的高24位)
IPMSG_SENDCHECKOPT 傳送檢查(需要對(duì)方返回確認(rèn)信息)
IPMSG_FILEATTACHOPT 傳送文件選項(xiàng)
3) 附件類型命令(文件類型命令字的低8位)
IPMSG_FILE_REGULAR 普通文件
IPMSG_FILE_DIR? ???目錄文件
IPMSG_FILE_RETPARENT 返回上一級(jí)目錄
2、 數(shù)據(jù)包格式(使用字符串):
1) 數(shù)據(jù)包格式(版本1的格式)
版本號(hào)(1):包編號(hào):發(fā)送者姓名:發(fā)送者主機(jī)名:命令字:附加信息
2) 舉例如下
“1:100:shirouzu:Jupiter:32:Hello”
3、 數(shù)據(jù)包處理總述:
1) 用戶識(shí)別
當(dāng)IPMSG 啟動(dòng)時(shí),命令I(lǐng)PMSG_BR_ENTRY被廣播到網(wǎng)絡(luò)中,向所有在線的用戶提示一個(gè)新用戶的到達(dá)(即表示“我來了”);所有在線用戶將把該新上線用戶添加到自己的用戶列表中,并向該新上線用戶發(fā)送IPMSG_ANSENTRY命令(即表示“我在線”);該新上線用戶接收到IPMSG_ANSENTRY命令后即將在線用戶添加到自己的用戶列表中。
2) 收發(fā)消息
使用IPMSG_SENDMSG命令發(fā)送消息,消息內(nèi)容添加在附加信息中;在接收消息時(shí),如果對(duì)方要求回信確認(rèn)(IPMSG_SENDCHECKOPT位打開),則需發(fā)送IPMSG_RECVMSG命令并將對(duì)方發(fā)送的數(shù)據(jù)包的編號(hào)放在附加信息中一同發(fā)送至發(fā)送消息方
3) 附加文件的擴(kuò)充(添加于第9版)
帶有IPMSG_FILEATTACHOPT位的IPMSG_SENDMSG命令可用來傳輸文件,文件屬性及內(nèi)容添加在附加信息中,文件內(nèi)容添加在消息內(nèi)容后并以’\0’與之分隔開。
傳輸文件時(shí)以下信息將被添加到消息內(nèi)容之后(包括格式):文件序號(hào):文件名:大小(單位:字節(jié)):最后修改時(shí)間:文件屬性[: 附加屬性=val1[,val2…][:附加信息=…]]:\a:文件序號(hào)…
(文件大小、最后修改時(shí)間和文件屬性為十六進(jìn)制數(shù),如果文件名中包含’:’則使用“::”代替)。
接收端開始接收文件時(shí),請(qǐng)求傳輸文件命令I(lǐng)PMSG_GETFILEDATA將發(fā)送到發(fā)送端的TCP端口(和UDP的發(fā)送端口相同),并將發(fā)送端發(fā)送的包編號(hào):文件序號(hào):偏移量(全為十六進(jìn)制格式)寫到附加信息區(qū)一同發(fā)送,文件發(fā)送端接收到該請(qǐng)求信息并進(jìn)行校驗(yàn)正確后即開始發(fā)送文件(不使用任何格式,亦不進(jìn)行加密)。
當(dāng)接收端接收到目錄文件時(shí),將發(fā)送附加信息區(qū)為發(fā)送端發(fā)送的包編號(hào):文件序號(hào):偏移量(全為十六進(jìn)制格式)的 IPMSG_GETDIRFILES命令,以用來請(qǐng)求傳輸目錄文件;發(fā)送端則將頭信息長(zhǎng)度:文件名:文件大小:文件屬性:文件內(nèi)容添加到附加信息區(qū)(除了文件名和文件內(nèi)容外,其余皆為十六進(jìn)制),頭信息長(zhǎng)度是從頭信息長(zhǎng)度開始到文件內(nèi)容前的‘:’分割符為止的字符個(gè)數(shù)。
當(dāng)文件屬性為IPMSG_FILE_DIR時(shí),IPMsg能夠自動(dòng)識(shí)別其為目錄,下一個(gè)文件的數(shù)據(jù)在該目錄之后。
當(dāng)文件屬性為IPMSG_FILE_RETPARENT時(shí),IPMsg識(shí)別其動(dòng)作為返回上一級(jí)目錄,在這種情況下,文件名為‘.’其屬性為當(dāng)前目錄的值。?
來源: IPMSG飛鴿傳書3——協(xié)議翻譯
總結(jié)
以上是生活随笔為你收集整理的IPMSG飞鸽传书3——协议翻译的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 超适合小白的python新手教程
- 下一篇: 准备拉琴的zskame大白菜