xeim源碼
① 【飛鴿傳書軟體】 飛鴿傳輸軟體可以區域網內聊天,請問是怎樣實現的呢如果有點嗎實現代碼
區域網聊天軟體飛鴿傳書是目前比較流行的區域網即時通訊軟體,由於歷史悠久,它具有比較多的用戶。 因為 FreeEIM 的實現原理和飛鴿傳書差不多,希望廣大用戶了解其原理後,在使用時更加得心應手。 程序啟動時先讀取用戶配置文件,一般是"*.ini"格式,然後,使用Winsock的廣播消息給整個區域網發送一個數據包,這時候,如果其他電腦已經運行了飛鴿傳書,那麼他收到這個包後,會將包的信息讀取出來,當然,這個包里有用戶的IP,用戶名,性別等等。這樣,在用戶列表裡就多了一個用戶了。他的用戶檢查方式就如此簡單而已。至於跨網段的實現,只需簡單地修改一下廣播地址就行了,如果不考慮速度,你可以給整個internet發廣播消息。 消息發送,文件傳輸這些功能,都比較簡單,如果你會網路編程,給你對方IP地址,這些功能實現起來再簡單不過了。語音、視屏等,只需編寫一些語音視頻採集代碼,傳書的話,就像傳文件一樣。這里給段廣播消息的實現代碼吧: // 發送廣播登陸消息
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\ 用戶密碼以不可逆加密方式存儲. * 如果你忘記了密碼, 可以在注冊表中將此鍵值刪除,清除密碼*\\HKEY_CURRENT_USER\Software\HSTools\IPMsgEng\PasswordStr7.飛鴿一次傳送文件數達到幾千個時,有丟失文件的可能,懷疑是飛鴿的一個bug,而傳輸大文件則沒有問題;8.飛鴿最穩定的正式版本是V2.06;目前v2.50 alpha6 版正在測試,尚未正式發布;其他如2.71,2007綠色版為修改版本,並非正版;