发送
#include <Stdio.h>
#include <WinSock.h>
//////////////////////////////////////////////////////////////////////////
struct AfxInitSocket
{
AfxInitSocket()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(1, 1), &wsaData);
}
~AfxInitSocket()
{
WSACleanup();
}
} _AfxInitSocket;
//////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
bool bBroadcast = true;
SOCKET hSocket= socket(PF_INET, SOCK_DGRAM, 0);
setsockopt(hSocket, SOL_SOCKET, SO_BROADCAST, (char *) &bBroadcast, sizeof(bBroadcast));
SOCKADDR_IN addrUDP = { 0 };
addrUDP.sin_family = AF_INET;
addrUDP.sin_port = htons(0);
addrUDP.sin_addr.s_addr = htonl(INADDR_ANY);
if (bind(hSocket, (SOCKADDR *) &addrUDP, sizeof(addrUDP)) != 0) {
return -1;
}
addrUDP.sin_family = AF_INET;
addrUDP.sin_port = htons(7001);
addrUDP.sin_addr.s_addr = htonl(INADDR_BROADCAST);
char szSendBuffer[] = "Hello, This is Server!";
sendto(hSocket, szSendBuffer, sizeof(szSendBuffer), 0, (SOCKADDR *) &addrUDP, sizeof(SOCKADDR_IN));
return 0;
}
//////////////////////////////////////////////////////////////////////////
接收
#include <Stdio.h>
#include <Conio.h>
#include <WinSock.h>
//////////////////////////////////////////////////////////////////////////
struct AfxInitSocket
{
AfxInitSocket()
{
WSADATA wsaData;
WSAStartup(MAKEWORD(1, 1), &wsaData);
}
~AfxInitSocket()
{
WSACleanup();
}
} _AfxInitSocket;
//////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
SOCKADDR_IN addrUDP = { 0 };
addrUDP.sin_port = htons(7001);
addrUDP.sin_family = AF_INET;
addrUDP.sin_addr.s_addr = htonl(INADDR_ANY);
SOCKET hSocket = socket(AF_INET, SOCK_DGRAM, 0);
if (bind(hSocket, (SOCKADDR FAR *) &addrUDP, sizeof(addrUDP)) != 0) {
return -1;
}
int nTimeout = 1000; // 设置超时一秒
setsockopt(hSocket, SOL_SOCKET, SO_RCVTIMEO, (char *) &nTimeout, sizeof(nTimeout));
for (int i=0; i<20; ++i) {
int nSize = sizeof(SOCKADDR_IN);
int nRecvLength = 0;
char szRecvBuffer[1024] = { 0 };
nRecvLength = recvfrom(hSocket, szRecvBuffer, sizeof(szRecvBuffer), 0, (SOCKADDR *) &addrPeer, &nSize);
if (nRecvLength != SOCKET_ERROR) {
szRecvBuffer[nRecvLength] = 0;
printf("Recv --- %s/n", szRecvBuffer);
}
else {
printf("Timeout/n");
}
}
return 0;
}
//////////////////////////////////////////////////////////////////////////