服务端
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 6080
#define BUF_SIZE 512
int main(int argc, char* argv[])
{
char buf[BUF_SIZE ];
// Init.
WSADATA wsa;
WORD sockVersion = MAKEWORD(2, 2);
if (WSAStartup(sockVersion, &wsa) != 0)
{
printf("WSAStartup failed\n");
return 0;
}
// Create a socket for UDP in server
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == INVALID_SOCKET)
{
printf("create socket failed\n");
return 0;
}
// Bind addr.
sockaddr_in serverAddr;
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
bind(sock, (sockaddr*)&serverAddr, sizeof(serverAddr));
sockaddr_in clientAddr;
int clientAddrLen = sizeof(clientAddr);
for (;;)
{
memset(buf, 0, BUF_SIZE);
// memset(&clientAddr, 0, sizeof(sockaddr_in));
int RecvLen = recvfrom(sock, buf, BUF_SIZE , 0, (sockaddr *) &clientAddr, &clientAddrLen);
if (RecvLen > 0) {
buf[RecvLen] = 0x00;
printf("Received the message: %s from IP:[%s] Port:[%d]\n", buf, inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port));
// Echo the received message to Client
strcat(buf, ": Server");
sendto(sock, buf, strlen(buf), 0, (sockaddr*)&clientAddr, clientAddrLen);
printf("Echo the received message to IP:[%s] Port:[%d]\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port));
}
}
closesocket(serSocket);
WSACleanup();
return 0;
}
客户端
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
#define PORT 6080
#define BUF_SIZE 4096
int main(int argc, char* argv[])
{
char buf[BUF_SIZE];
// Init.
WSADATA wsa;
WORD sockVersion = MAKEWORD(2, 2);
if (WSAStartup(sockVersion, &wsa) != 0)
{
printf("WSAStartup failed\n");
return 0;
}
// Create a socket for UDP in Client
SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sockClient == INVALID_SOCKET)
{
printf("create socket failed\n");
return 0;
}
// Binding client ports
sockaddr_in cli_addr;
cli_addr.sin_family = AF_INET;
cli_addr.sin_port = htons(4935);
cli_addr.sin_addr.s_addr = 0;
if (bind(sockClient, (struct sockaddr*)&cli_addr, sizeof(cli_addr)) < 0)
{
perror("bind");
exit(EXIT_FAILURE);
}
// Set net. parameters for Client
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int addrLen = sizeof(addr);
strcpy(buf, " Hello world ! ");
// Send a message
int SentLen = sendto(sockClient, buf, strlen(buf), 0, (sockaddr *)&addr, sizeof(addr));
if (SentLen == 0)
{
printf("send failed\n");
return -1;
}
printf("send the message: %s\n", buf);
char recvBuf[BUF_SIZE];
memset(recvBuf, 0, BUF_SIZE);
/* sockaddr_in addrSever = { 0 };
int nServerAddrLen = sizeof(addrSever);
int RecvLen = recvfrom(sockClient, recvBuf, BUF_SIZE, 0, (sockaddr *)&addrSever, &nServerAddrLen);
*/
int RecvLen = recvfrom(sockClient, recvBuf, BUF_SIZE, 0, (sockaddr *)&addr, &addrLen);
if (RecvLen > 0) {
recvBuf[RecvLen] = 0x00;
printf("Receive the message from Server : %s\n", recvBuf);
printf("IP:[%s] Port:[%d]\n", inet_ntoa(addr.sin_addr), ntohs(addr.sin_port));
}
// Close a socket
closesocket(sockClient);
WSACleanup();
system("pause");
return 0;
}