打怪升级之发送单个UDP包升级版

news/2024/5/18 14:00:32 标签: udp, 网络, tcp/ip

目标

1.message的输入由edit_control进行,需要捕获输入。
2.用户的主机地址和发送地址不一样,需要分别设置并绑定。

设计RC外观

必备组件:主机IP与端口,从机IP与端口,消息框,发送,连接按钮。

在这里插入图片描述

可能的主要难点:
1.UDP数据发送的字节序问题。
2.输入过程中可能使用到的16进制问题。

主机套接字

主机套接字的建立由连接按钮发生,代码如下:

void CMFCUDPSendDlg::OnBnClickedConnect()
{
	// TODO: 在此添加控件通知处理程序代码
	//获取变量值
	CString C_H_IP;
	CString C_H_Port;
	HOST_IP_E.GetWindowText(C_H_IP);
	HOST_PORT_E.GetWindowText(C_H_Port);
	//获取port的值
	int H_port_i = _wtoi(C_H_Port);

	if (H_port_i < 10000)
	{
		if (!host_sock.Create(H_port_i, SOCK_DGRAM, C_H_IP))
		{
			MessageBox(_T("创建主机套接字失败"));
		}
		else
		{
			CString str;
			str.Format(_T("创建主机套接字成功\nIP:%ws\nPORT:%d\n"), C_H_IP.GetString(), H_port_i);
			MessageBox(str);
		}
	}
	else
	{
		MessageBox(_T("主机PORT不合法"));
	}
}

实现效果:

s

需要注意的是,主机套接字是你的本地接收端,它的IP地址需要与你真实存在的IP与端口对应,你可以去网络设置里查看自己的IP地址有哪些可用。

客机套接字与预发送数据

1.创立客机套接字的主要目的不是为了接收信息而是为了发送信息,所以客机套接字本身的IP地址和端口不是很重要。
2.提供了一个预设的char数组模板,后续发送数据以此模板为蓝本,一个数据包不能太大。

//MSG_t接受消息结构体
typedef struct msg_t
{
	char type;
	char text[100];
} MSG_t;

void CMFCUDPSendDlg::OnBnClickedSend()
{
	// TODO: 在此添加控件通知处理程序代码
	//获取变量值
	CString C_G_IP;
	CString C_G_Port;
	GUEST_IP_E.GetWindowText(C_G_IP);
	GUEST_PORT_E.GetWindowText(C_G_Port);
	//建立客机套接字
	guest_sock.Create(0, SOCK_DGRAM, NULL);

	//定义消息体
	MSG_t msg = { 0 };
	msg.type = 1;
	int i = 0;
	for (i = 0; i <= 98; i++)msg.text[i] = i;
	msg.text[99] = ' \0';

	//获取port的值
	int G_port_i = _wtoi(C_G_Port);
	if (G_port_i < 10000)
	{
		if (guest_sock.SendTo((char*)&msg, sizeof(msg), G_port_i, C_G_IP, 0) != SOCKET_ERROR)
		{
			CString str;
			str.Format(_T("数据发送成功"));
			MessageBox(str);
		}
		else
		{
			CString str;
			str.Format(_T("套接字错误码 : %d"), GetLastError());
			MessageBox(str);
		}
	}
	else
	{
		MessageBox(_T("客机PORT不合法"));
	}
}

实现效果:

在这里插入图片描述

在这里插入图片描述

可以看到,数据按字符串顺序发送给了UDP包出去了。

消息框string转为待发送格式消息

由消息框输入UDP数据的办法有很多,最好的办法是用excel表格,这样的UDP数据最直观,如果excel表格不行的话,还可以使用CGridControl这一类扩展控件来帮忙。

笔者综合考虑了一下各种可能的数据交互方式,最好的方式是用一个文件入,一个文件出。不要硬刚用MFC写出excel,可以直接用csv文件保存接收数据。

具体的办法往后继续说。


http://www.niftyadmin.cn/n/134451.html

相关文章

删库跑路现场还原

数据库是公司重要资产&#xff0c;在此类重要资产平台上&#xff0c;尤其是重要操作&#xff0c;应该保持敬畏心。数据库被删了&#xff1f;可怎么证明是某某某删了数据库&#xff1f;或者根本都不知道谁删除了数据库&#xff0c;又没抓现行&#xff0c;该怎么办&#xff1f;正…

GlobalExceptionHandler 异常处理机制说明

GlobalExceptionHandler 是什么 GlobalExceptionHandler是一个程序中的异常处理机制&#xff0c;可以在应用程序中捕获和处理未被处理的异常。它是一个全局异常处理器&#xff0c;可以截取应用程序中的任何异常并执行特定的操作&#xff0c;例如记录异常、生成错误报告、通知开…

扬帆优配|数字经济刮起“东风”,龙头晋级7连板

今日两市共40只涨停股&#xff0c;主要集中于数字经济、6G板块&#xff0c;上一个交易日涨停股为29股&#xff1b;除掉18只ST股及3只一字板新股&#xff0c;共19股涨停。另外&#xff0c;4股封板未遂&#xff0c;整体封板率为83%。 6股封单金额超亿元 从收盘涨停板封单量来看&…

ECharts 下载与安装教程

文章目录ECharts 简介一&#xff0c;ECharts 下载二&#xff0c;ECharts 安装三&#xff0c;ECharts 入门案例&#xff08;一&#xff09;引入 ECharts&#xff08;二&#xff09;准备容器&#xff08;三&#xff09;使用 Echarts 绘制一个简单的图表ECharts 简介 ECharts是一…

Unity更新插件提示后the same name nunit.framework unity项目一直不能运行

最近在做一个旧项目&#xff0c;是Unity5&#xff0c;没法升级&#xff0c;但是因为加了一些pack&#xff0c;就死活compile出错了是C#代码&#xff08;内部&#xff09;出错&#xff0c;项目一直跑不起来了出错的提示是很怪&#xff0c;说unit.framework重复了&#xff0c;这个…

【数字IC基础】半导体存储器(Semi-conductor Memory):静态存储器SRAM、动态存储器DRAM、只读存储器ROM

文章目录 一、半导体存储器(Semi-conductor Memory)二、随机读写存储器RAM(Random Access Memory)2、1、SRAM(Static RAM)静态存储器2、2、DRAM(Dynamic RAM)动态存储器2、3、EDRAM增强型DRAM三、只读存储器ROM(Read Only Memory)3、1、MROM 掩膜只读存储器3、2、PROM …

Cobalt Strike----(1)

团队服务器 Cobalt Strike 分为客户端组件和服务器组件。服务器组件&#xff0c;也就是团队服务器&#xff0c;是Beacon payload 的控制器&#xff0c;也是 Cobalt Strike 社会工程功能的托管主机。团队服务器还存储由Cobalt Strike 收集的数据&#xff0c;并管理日志记录。Cob…

云和虚拟化有什么区别?

云和虚拟化概念容易被混淆&#xff0c;特别是因为它们都围绕着用抽象资源创建有用的环境。但是&#xff0c;虚拟化是一项允许您从单个物理硬件系统创建多个模拟环境或专用资源的技术&#xff0c;而云是可在整个网络中抽象&#xff0c;汇总和共享可伸缩资源的IT环境。简而言之&a…