18,356
社区成员
发帖
与我相关
我的任务
分享
int PASCAL FAR sendto( SOCKET s, const char FAR* buf, int len, int flags,
const struct sockaddr FAR* to, int tolen);
SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN remoteAddr_1; //对端ip,
//..此处创建多个SOCKADDR_IN,都放入AddrStruct结构体,此处省略
//开始向多个ip发送,sendto()的第一个参数都是同一个sockClient,第五个参数ip不同,(或者每次向不同ip send都要创建一个套接字??)
for(int remoteNum= AddrStruct.getSize(); remoteNum>=0; remoteNum--)
{
sendto(sockClient,sendBuf,strlen(senBuf)+1,0,(SOCKADDR*)&(AddrStruct.getAt(remoteNum)),len);
}
// 命令请求及应答数据头
struct CommunicateHeader
{
unsigned leadByte; // 前导
unsigned char version; // 协议版本
unsigned char flag; // 请求(0)or应答(1)
unsigned short sequense; // 序号
unsigned dataLength; // 数据长度
unsigned cmmand; // 命令
unsigned result; // 应答结果
};
sockaddr_in sendAddr;
sendAddr.sin_family = AF_INET;
sendAddr.sin_addr.s_addr = INADDR_BROADCAST; //广播地址
sendAddr.sin_port = htons(SDP_SERVER_PORT);
//组包头
CommunicateHeader header;
memset(&header, 0, sizeof(CommunicateHeader));
memcpy(&header.leadByte, "NVSP", sizeof(header.leadByte));
header.version = 0;
header.flag = 0;
header.sequense = 0;
header.dataLength =0;
header.cmmand = NVSP_UDP_DEVICE;
header.result = 0;
UINT iCheckSum = nvspchecksum((UCHAR*)(&header), sizeof(CommunicateHeader));
SOCKET sendSocket = socket(AF_INET, SOCK_DGRAM, 0); //创建UDP socket
if(INVALID_SOCKET == sendSocket)
{
AfxMessageBox(_T("创建SOCKET失败!"));
return;
}
BOOL optval;
long lRet=setsockopt(sendSocket, SOL_SOCKET, SO_BROADCAST, (LPSTR)&optval, sizeof(optval));//设定为广播形式
if(-1 == lRet)
{
AfxMessageBox(_T("SOCKET选项设置失败!"));
return;
}
UINT bufferSize = sizeof(CommunicateHeader) + 4;
char* sendPacket = new char[bufferSize];
memcpy(sendPacket, &header, sizeof(CommunicateHeader));
memcpy(sendPacket + sizeof(CommunicateHeader), &iCheckSum, sizeof(iCheckSum));
long lBytesSend = sendto(sendSocket, (char*)sendPacket, bufferSize, 0, (LPSOCKADDR)&sendAddr,sizeof(sendAddr));
if (lBytesSend != bufferSize)
{
AfxMessageBox(_T("发送数据失败!"));
return -1;
}
delete []sendPacket;
sockaddr_in sendAddr;
sendAddr.sin_family = AF_INET;
sendAddr.sin_addr.s_addr = INADDR_BROADCAST;
sendAddr.sin_port = htons(SDP_SERVER_PORT);
//组包头
CommunicateHeader header;
memset(&header, 0, sizeof(CommunicateHeader));
memcpy(&header.leadByte, "NVSP", sizeof(header.leadByte));
header.version = 0;
header.flag = 0;
header.sequense = 0;
header.dataLength =0;
header.cmmand = NVSP_UDP_DEVICE;
header.result = 0;
UINT iCheckSum = nvspchecksum((UCHAR*)(&header), sizeof(CommunicateHeader));
SOCKET sendSocket = socket(AF_INET, SOCK_DGRAM, 0);
if(INVALID_SOCKET == m_sdpSendSocket)
{
AfxMessageBox(_T("创建SOCKET失败!"));
return;
}
BOOL optval;
lRet=setsockopt(sendSocket, SOL_SOCKET, SO_BROADCAST, (LPSTR)&optval, sizeof(optval));//设定为广播形式
if(-1==lRet)
{
AfxMessageBox(_T("SOCKET选项设置失败!"));
return;
}
UINT bufferSize = sizeof(CommunicateHeader) + 4;
char* sendPacket = new char[bufferSize];
memcpy(sendPacket, &header, sizeof(CommunicateHeader));
memcpy(sendPacket + sizeof(CommunicateHeader), &iCheckSum, sizeof(iCheckSum));
long lBytesSend = sendto(sendSocket, (char*)sendPacket, bufferSize, 0, (LPSOCKADDR)&sendAddr,sizeof(sendAddr));
if (lBytesSend != bufferSize)
{
AfxMessageBox(_T("发送数据失败!"));
return -1;
}
delete []sendPacket;
SOCKET s = ::socket(AF_INET, SOCK_DGRAM, 0);
// 有效SO_BROADCAST选项
BOOL bBroadcast = TRUE;
::setsockopt(s, SOL_SOCKET, SO_BROADCAST, (char*)&bBroadcast, sizeof(BOOL));
// 设置广播地址,这里的广播端口号(电台)是4567
SOCKADDR_IN bcast;
bcast.sin_family = AF_INET;
bcast.sin_addr.s_addr = ::inet_addr("255.255.255.255");
bcast.sin_port = htons(4567);
// 发送广播
char sz[] = "This is just a test. \r\n";
while(TRUE)
{
::sendto(s, sz, strlen(sz), 0, (sockaddr*)&bcast, sizeof(bcast));
::Sleep(5000);
}