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綠色版為修改版本,並非正版;