xeim源碼-ag真人国际官网
① 【飛鴿傳書軟體】 飛鴿傳輸軟體可以區域網內聊天,請問是怎樣實現的呢如果有點嗎實現代碼
區域網聊天軟體飛鴿傳書是目前比較流行的區域網即時通訊軟體,由於歷史悠久,它具有比較多的用戶。 因為 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綠色版為修改版本,並非正版;