飛鴿傳書實現原理
void EM_UserLogin::SendLogin_BC(LPEM_DATA msg)
{
SOCKET m_socket;
m_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
if (INVALID_SOCKET == m_socket)
{
MessageBox(0, "socket failed.", NULL, MB_OK);
}
SOCKADDR_IN sin;sin.sin_addr.s_addr = htonl(INADDR_BROADCAST);
sin.sin_family = AF_INET;
sin.sin_port = htons(BROADCAST_SEND_PORT);BOOL bOpt = TRUE;
if (SOCKET_ERROR == setsockopt(m_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt)))
{
// Error occurred
::MessageBox(0,"BC setsockopt error.",0,0);
return;
}
char *tmpBuf = msg->GetBuffer();
if (SOCKET_ERROR == sendto(m_socket, tmpBuf, msg->GetLength(), 0, (PSOCKADDR)&sin, sizeof(sin)))
{
// Error occurred
::MessageBox(0,"BC sendto error.",0,0);
return;
}closesocket(m_socket);
}
我們要向QQ、MSN、ICQ、AIM等大型即時通訊看齊,和他們對比,XEIM只是班級裡面的一個差生,要趕得上這些優秀的同學,只有付出更大的努力才有可能追上甚至超趕他們。但是,你什麼也不做,這會變成一個笑話。
飛鴿傳書的實現原理:
(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.飛鴿使用C++語言,開發工具:Visual C++ 4.1, 6.0, or later;
2.飛鴿公開原始碼,在作者(來自日本廣島的白水啟章)和漢化者(阿志)網站下載原始碼,原始碼註釋為日文;可以使用VC++修改、編譯;
3.飛鴿傳書是來自日本的軟體,日文版是它的第一版本;此外還有中文,英文,韓文,葡萄牙文等語言;
4.飛鴿使用的加密演算法:RSA、Blowfish、RC;
5.飛鴿可以使用命令列方式傳送資訊,命令格式如下:
ipmsg [埠] /MSG [/LOG][/SEAL] <主機名或IP地址> <訊息>
可以使用IPMsg [埠] 命令改變預設埠,並同時啟動多個例項,但是修改後只有使用相同埠的使用者才能收到相互的資訊;
6.飛鴿非安裝版,並不是純綠色軟體,直接刪除會在登錄檔留下垃圾鍵值;
* 飛鴿把所有設定資訊都儲存在登錄檔的以下位置:
使用者密碼以不可逆加密方式儲存.
* 如果你忘記了密碼, 可以在登錄檔中將此鍵值刪除,清除密碼*\\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr
7.飛鴿一次傳送檔案數達到幾千個時,有丟失檔案的可能,懷疑是飛鴿的一個bug,而傳輸大檔案則沒有問題;
8.飛鴿最穩定的正式版本是V2.06;目前v2.50 alpha6 版正在測試,尚未正式釋出;其他如2.71,2007綠色版為修改版本,並非正版;
相關文章
- Linux中利用NFS實現飛鴿傳書LinuxNFS
- [轉] PERL模擬飛鴿傳書檔案傳輸總結
- 利用飛鴿協議實現通訊功能協議
- 世上的人大都只會“飛鴿傳書下載”,沒人開發
- 解決“飛鴿傳書”無法顯示區域網使用者的方法
- 一個不錯的區域網聊天工具之飛鴿傳書下載地址
- Python呼叫飛書傳送訊息Python
- 檔案上傳原理和實現
- 《神骰傳說》現已發售:肉鴿“寶可夢”,骰子玩出花
- Web上傳檔案的原理及實現Web
- C# 斷點續傳原理與實現C#斷點
- 現代作業系統-原理與實現【讀書筆記】作業系統筆記
- POJ 3370-Halloween treats(鴿巢原理)
- 飛書 + Lua 實現企業級組織架構登入認證架構
- Ardupilot實現同一套程式碼支援不同的飛控板原理
- 飛漿(paddle)實現機器學習機器學習
- UVA11237 Halloween treats (鴿巢原理)
- 飛書開發助手
- Synchronized 實現原理synchronized
- synchronized實現原理synchronized
- block實現原理BloC
- AQS實現原理AQS
- jQuery實現原理jQuery
- HashMap實現原理HashMap
- AsyncTask實現原理
- weak實現原理
- Session實現原理Session
- AOP如何實現及實現原理
- Java實現飛機大戰遊戲Java遊戲
- 實現漫天飛雪的動畫效果動畫
- 【讀書筆記】Java併發機制的底層實現原理筆記Java
- Jenkins+Allure測試報告+飛書機器人傳送通知Jenkins測試報告機器人
- 飛書Webhook觸發操作指南,實現事件驅動型工作流自動化WebHook事件
- 使用matlab實現遺傳演算法解決飛行員偵查問題Matlab演算法
- Node + js實現大檔案分片上傳基本原理及實踐(一)JS
- golang reflect 實現原理Golang
- synchronized 的實現原理synchronized
- Greys主要實現原理