浅谈飞鸽传书实现原理
生活随笔
收集整理的這篇文章主要介紹了
浅谈飞鸽传书实现原理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來自:http://www.freeeim.com/news/onews.asp?id=177
??? 局域網聊天軟件飛鴿傳書是目前比較流行的局域網即時通訊軟件,由于歷史悠久,它具有比較多的用戶。
因為 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只是班級里面的一個差生,要趕得上這些優秀的同學,只有付出更大的努力才有可能追上甚至超趕他們。但是,你什么也不做,這會變成一個笑話。 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的浅谈飞鸽传书实现原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 运动目标检测_单高斯背景建模
- 下一篇: Qt修炼手册11_多线程编程和QThre