UDP传输

服务端

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值