备忘,一个server,一个client,都在win7+vs2019Community用empty project方式编译运行成功。
server.c
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
WSADATA wsaData;
WORD version = MAKEWORD(2,2);
if(WSAStartup(version, &wsaData) != 0)
{
return 0;
}
SOCKET sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sockfd == INVALID_SOCKET)
{
printf("socket error !");
return 0;
}
struct sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(8088);
serverAddr.sin_addr.S_un.S_addr = INADDR_ANY;
if(bind(sockfd, (struct sockaddr *)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR)
{
printf("bind() failed.\n");
closesocket(sockfd);
return 0;
}
struct sockaddr_in remoteAddr;
int addrLen = sizeof(remoteAddr);
while (1)
{
char recvData[255];
int ret = recvfrom(sockfd, recvData, 255, 0, (struct sockaddr *)&remoteAddr, &addrLen);
if (ret <= 0)
{
printf("recvfrom() failed.\n");
continue;
}
{
recvData[ret] = 0x00;
printf("data received from: %s, len = %d, data: %s\n", inet_ntoa(remoteAddr.sin_addr), ret, recvData);
}
}
closesocket(sockfd);
WSACleanup();
return 0;
}
client.c
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
int main(int argc, char* argv[])
{
WORD version = MAKEWORD(2,2);
WSADATA wsaData;
if(WSAStartup(version, &wsaData) != 0)
{
return 0;
}
SOCKET sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(8088);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int len = sizeof(sin);
char * sendData = "abcdefghijklmnopqrstuvwxyz.\n";
for(int i=0; i<100; i++)
{
sendto(sockfd, sendData, strlen(sendData), 0, (struct sockaddr *)&sin, len);
Sleep(1000);
}
closesocket(sockfd);
WSACleanup();
return 0;
}