示例代碼:
Sock_UDP::Sock_UDP()
{
m_socket = INVALID_SOCKET;
WSAData ws;
//每個Winsock程序必須使用WSAStartup載入合適的Winsock動態(tài)鏈接庫,如果載入失敗,WSAStartup將返回SOCKET_ERROR,這個錯誤就是WSANOTINITIALISED
if (WSAStartup(MAKEWORD(2,2),&ws)!=0)
{
LOG("WSAStartup failed! Error: %d", WSAGetLastError());
}
}
Sock_UDP::~Sock_UDP()
{
}
/******************************************************************
* 函數(shù)介紹:對連接進行初始化
* 輸入?yún)?shù): strIPAddress:廣播的ip地址,strPort: 端口號
* 輸出參數(shù):
* 返回值 :
*******************************************************************/
BOOL Sock_UDP::InitSocket(const CString strIPAddress,const CString strPort)
{
//創(chuàng)建套接字,ipv4,報文,udp協(xié)議
m_socket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
//創(chuàng)建socket失敗
if (INVALID_SOCKET == m_socket)
{
LOG("failed to create socket");
return false;
}
//初始化sock地址
InitSockAddress(strIPAddress,strPort);
// 綁定
if (bind (m_socket,
(struct sockaddr FAR *) &m_sockLocalAddress,
sizeof (m_sockLocalAddress)) == SOCKET_ERROR)
{
//報錯
LOG("Binding socket failed! Error: %d" ,WSAGetLastError());
closesocket (m_socket);
return false;
}
int iOptVal=64; //1秒
// 設置組播存活時間
if (setsockopt (m_socket,
IPPROTO_IP,
3,
(char FAR *)&iOptVal,
sizeof (int)) == SOCKET_ERROR)
{
//報錯
LOG("setsockopt failed! Error: %d" ,WSAGetLastError());
closesocket (m_socket);
return false;
}
return true;
}
/******************************************************************
* 函數(shù)介紹:關(guān)閉socket
* 輸入?yún)?shù):
* 輸出參數(shù):
* 返回值 :
*******************************************************************/
void Sock_UDP::CleanSocket()
{
shutdown(m_socket,0x01);
closesocket(m_socket);
WSACleanup();
}
/******************************************************************
* 函數(shù)介紹:初始化IP組播地址和端口
* 輸入?yún)?shù):strIPAddress:ip地址,strPort: 端口號
* 輸出參數(shù):
* 返回值 :
*******************************************************************/
void Sock_UDP::InitSockAddress(const CString strIPAddress,const CString strPort)
{
//本地sock地址設置
m_sockLocalAddress.sin_family = AF_INET; //ipv4地址類型
m_sockLocalAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
m_sockLocalAddress.sin_port = htons(0);
memset(m_sockLocalAddress.sin_zero,0,8);
//目的sock地址設置
//IPv4版本
m_sockDesAddress.sin_family = AF_INET;
//端口
m_sockDesAddress.sin_port = htons (atol(strPort));
//地址
m_sockDesAddress.sin_addr.s_addr = inet_addr (strIPAddress);
}
posted on 2013-06-19 18:00
王海光 閱讀(6901)
評論(0) 編輯 收藏 引用 所屬分類:
C++