windows udp

udp的一对一通信

1.导入版本
2.确定版本信息
3.创建socket
4.初始化协议地址簇
5.绑定
6.通讯
7.结束

server端


#include <iostream>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)
int main()
{
  //确定版本信息
	WSADATA wsadata;
	WSAStartup(MAKEWORD(2, 2), &wsadata);
	//3。创建socket
	SOCKET serversocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	//4.初始化地址协议簇
	SOCKADDR_IN serveraddr = {};
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(9001);
	serveraddr.sin_addr.S_un.S_addr = inet_addr("192.168.3.12");

	//5.绑定
	if (bind(serversocket, (sockaddr*)&serveraddr, sizeof(serveraddr)) > 0)
	{
		printf("绑定失败");
		return -1;
	}
	printf("绑定成功");

	//6.通讯
	char buff[128] = {};
	SOCKADDR_IN clientaddr = {};
	int len = sizeof(clientaddr);
	if (recvfrom(serversocket, buff, sizeof(buff) - 1, 0, (sockaddr*)&clientaddr, &len) > 0)
	{
		printf("来自ip:%s>>:%s\n", inet_ntoa(clientaddr.sin_addr), buff);


	}
	char tempbuff[128] = {};
	scanf_s("%s", tempbuff, 127);
	if (sendto(serversocket, tempbuff, strlen(tempbuff), 0, (sockaddr*)&clientaddr, sizeof(clientaddr) )> 0)
	{
	printf("发送成功");
	
	}
	getchar();
	getchar();
	//7.结束
	closesocket(serversocket);
	WSACleanup();
	return 0;
}


client端

// client.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//


#include<stdio.h>
#include<WinSock2.h>
#pragma comment(lib,"ws2_32.lib")
#pragma warning(disable:4996)
//1.导入库
//2.确定版本信息
//3.创建socket
//4.初始化协议簇
//5.通讯
//6.结束
int main()
{
   //确定版本信息
	WSADATA wsadata;
	WSAStartup(MAKEWORD(2, 2), &wsadata);
	//3.创建socket
	SOCKET clientsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

	//4.初始化协议簇
	SOCKADDR_IN serveraddr = {};
	serveraddr.sin_family = AF_INET;
	serveraddr.sin_port = htons(9001);
	serveraddr.sin_addr.S_un.S_addr = inet_addr("192.168.3.12");

	//5.通讯
	char buff[128];
	scanf_s("%s", buff, 127);
	if (sendto(clientsocket, buff, strlen(buff), 0, (sockaddr*)&serveraddr, sizeof(serveraddr)) > 0)
	{
		printf("发送成功");

	}
	char tempbuff[128] = {};
	int len = sizeof(serveraddr);
	//第1个参数表示socket套接字
	//第5,6个参数表示从哪个客户端传信息过来,可给null,表示不需要知道哪个客户端传的消息,给值用来保存客户端的ip
	if (recvfrom(clientsocket, tempbuff, sizeof(tempbuff) - 1, 0, (sockaddr*)&serveraddr,&len ) > 0)
		printf("来自ip: %s >>: %s\n", inet_ntoa(serveraddr.sin_addr), tempbuff);
	getchar();
	getchar();

	//6、结束
	closesocket(clientsocket);
	WSACleanup();
	return 0;
}

Windows系统下的UDP端口转发可以通过使用网络地址转换(NAT)实现。 NAT是一种网络转换技术,可以将内部网络的IP地址转换为外部网络可识别的IP地址,同时也可以将外部网络的IP地址转换为内部网络所需的IP地址。在Windows系统中,可以通过配置网络地址转换器来实现UDP端口转发。 首先,确保已经启用了Internet连接共享(ICS)服务。在控制面板中,找到网络和Internet选项,然后选择“网络和共享中心”。在左侧的导航栏中,点击“更改适配器设置”。找到使用的网络适配器,右击选择“属性”,然后在共享选项卡中勾选“允许其他网络用户通过此计算机的Internet连接来连接”选项。 接下来,打开CMD命令提示符窗口,输入以下命令来配置NAT: netsh interface portproxy add v4tov4 listenport=源端口 listenaddress=源IP地址 connectport=目标端口 connectaddress=目标IP地址 其中,将“源端口”和“源IP地址”替换为要转发的本地端口和本地IP地址,将“目标端口”和“目标IP地址”替换为要转发到的目标端口和目标IP地址。 执行完以上命令后,Windows系统就会将来自源端口的UDP流量转发到目标端口和目标IP地址。 需要注意的是,转发的端口必须是未被使用的端口,不然会导致冲突。另外,由于UDP是面向无连接的传输协议,所以在转发过程中可能会出现一些数据包丢失的情况。 总结起来,通过配置网络地址转换器,可以实现Windows系统下的UDP端口转发,将来自源端口的UDP流量转发到目标端口和目标IP地址。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风赤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值