客户端
#include <iostream>
#include <Winsock2.h>
#include <ws2tcpip.h>
#pragma comment(lib,"Ws2_32.lib")
int main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
int err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return -1;
}
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0);
if (INVALID_SOCKET == sock)
{
err = WSAGetLastError();
printf("error! error code is %d/n", err);
return -1;
}
struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addr.sin_port = htons(2018);
err = bind(sock, (struct sockaddr *)&addr, sizeof(addr));
if (SOCKET_ERROR == err)
{
err = WSAGetLastError();
printf("error! error code is %d/n", err);
return -1;
}
struct sockaddr_in from;
int len = sizeof(from);
int revlen;
char buff[2000];
while (1)
{
revlen = recvfrom(sock, buff, 2000, 0, (struct sockaddr *)&from, &len);
if (revlen > 0)
{
char str[INET_ADDRSTRLEN];
printf("%s %d\n", inet_ntop(AF_INET, &from.sin_addr, str, sizeof(str)), revlen);
}
}
closesocket(sock);
WSACleanup();
return 0;
}
服务器
#include <iostream>
#include <WinSock2.h>
#include <ws2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequested = MAKEWORD(2, 2);
int err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0)
{
return;
}
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
{
WSACleanup();
return;
}
SOCKET connect_socket;
connect_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (INVALID_SOCKET == connect_socket)
{
err = WSAGetLastError();
printf("error! error code is %d/n", err);
return;
}
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(3779);
sin.sin_addr.s_addr = INADDR_BROADCAST;
bool bOpt = true;
setsockopt(connect_socket, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt));
int nAddrLen = sizeof(SOCKADDR);
char buff[2000] = "";
while (1)
{
sprintf_s(buff, "%s", "ss");
int nSendSize = sendto(connect_socket, buff, strlen(buff), 0, (SOCKADDR*)&sin, nAddrLen);
if (SOCKET_ERROR == nSendSize)
{
err = WSAGetLastError();
printf("error!, error code is %d/n", err);
return;
}
printf("Send: %s/n", buff);
Sleep(500);
}
}