Windows—UDP编程

Client骨架:

#include <iostream>
#include <WinSock2.h>
#pragma  comment(lib,"ws2_32.lib")

int main()
{
	//启动Winsock DLL
	WORD wVersionRequested = MAKEWORD(2, 2);
	WSADATA lpWSAData;
	WSAStartup(wVersionRequested, &lpWSAData);
	//初始化并设置目标套接字地址
	SOCKADDR_IN saddr{ 0 };
	saddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(50123);
	//本进程创建一个套接字,类型为UDP
	SOCKET sClient = socket(AF_INET, SOCK_DGRAM, 0);
	//设置本进程套接字的选项,使其可以重用地址
	char bOptVal = FALSE;
	int bOptLen = sizeof(BOOL);
	setsockopt(sClient, SOL_SOCKET, SO_REUSEADDR, &bOptVal, bOptLen);

	char buffer[MAX_PATH]{ 0 };
	int length = sizeof(saddr);
	while (true)
	{
		scanf_s("%s", buffer, sizeof(buffer)/sizeof(char));
		//通过本进程的套接字sRet,把buffer发送到目标套接字
		sendto(sClient, buffer, sizeof(buffer), 0, (sockaddr*)&saddr, sizeof(saddr));
		memset(buffer, 0, sizeof(buffer));
		recvfrom(sClient, buffer, sizeof(buffer), 0, (PSOCKADDR)&saddr, &length);
		printf("Seriver:%s\n", buffer);
	}
	//清理
	closesocket(sClient);
	WSACleanup();
	system("pause");
	return 0;
}

Service骨架:

#include <iostream>
#include <WinSock2.h>
#pragma  comment(lib,"ws2_32.lib")

int main()
{
	//启动Winsock DLL
	WORD wVersionRequested = MAKEWORD(2, 2);
	WSADATA lpWSAData;
	WSAStartup(wVersionRequested, &lpWSAData);
	//初始化并设置本进程套接字地址
	SOCKADDR_IN saddr{ 0 };
	saddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
	saddr.sin_family = AF_INET;
	saddr.sin_port = htons(50123);
	//本进程创建一个套接字,类型为UDP
	SOCKET sService = socket(AF_INET, SOCK_DGRAM, 0);
	//设置本进程套接字的选项,使其可以重用地址
	char bOptVal = FALSE;
	int bOptLen = sizeof(BOOL);
	setsockopt(sService, SOL_SOCKET, SO_REUSEADDR, &bOptVal, bOptLen);
	//将sock地址与本进程套接字绑定
	bind(sService, (PSOCKADDR)&saddr, sizeof(saddr));


	char buffer[MAX_PATH]{ 0 };
	int length = sizeof(saddr);
	while (true)
	{
		if (recvfrom(sService, buffer, sizeof(buffer), 0, (PSOCKADDR)&saddr, &length) != -1)
		{
			printf("Client:%s\n", buffer);
			strcpy_s(buffer, sizeof(buffer), inet_ntoa(saddr.sin_addr));
			printf("IP:%s\t端口:%d", buffer,saddr.sin_port);
			sendto(sService, "收到", strlen("收到"), 0, (PSOCKADDR)&saddr, length);
		}
	}

	closesocket(sService);
	WSACleanup();
	system("pause");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值