初始化SOCKET:
//初始化广播Socket
WSADATA wsdata;
WSAStartup(MAKEWORD(2, 2), &(wsdata));
m_socketHmv = socket(AF_INET, SOCK_DGRAM, 0);
if (m_socketHmv != INVALID_SOCKET)
{
BOOL opt = TRUE;
int optret = setsockopt(m_socketHmv, SOL_SOCKET, SO_BROADCAST, (char* FAR)&opt, sizeof(opt));
//发送addr
USES_CONVERSION;
LPCSTR cClirntIp = (LPCSTR)T2A(m_strHmvClientIp);
memset(&m_addrtoHmv, 0, sizeof(m_addrtoHmv));
m_addrtoHmv.sin_family = AF_INET;
//cClirntIp为接收端的IP
m_addrtoHmv.sin_addr.S_un.S_addr = inet_addr(cClirntIp);
//cClirntIp为接收端的Port
m_addrtoHmv.sin_port = htons(m_nUdpPortHmv);
//本地addr
memset(&m_addrLocal, 0, sizeof(m_addrLocal));
m_addrLocal.sin_family = AF_INET;
m_addrLocal.sin_addr.s_addr = htonl(INADDR_ANY);
//本地port
m_addrLocal.sin_port = htons(m_nLocalPort);
//设置可以多次绑定
int nRecvBuf = 1;
optret = setsockopt(m_socketHmv, SOL_SOCKET, SO_REUSEADDR, (const char*)&nRecvBuf, sizeof(int));
//绑定本地发送使用端口,这样,本地发送udp消息时,就是从这个端口发送出去的
if (!bind(m_socketHmv, (sockaddr*)&m_addrLocal, sizeof(m_addrLocal)) != SOCKET_ERROR)
ASSERT(0);
}
发送:
//根据具体需要构建数据
int nLength = 200;
unsigned char* pData = new unsigned char[nLength];
.......
if (sendto(m_socketHmv, (char*)pData, nLength, 0, (sockaddr*)&m_addrtoHmv, sizeof(m_addrtoHmv)) == SOCKET_ERROR)
ASSERT(0);
delete pData;