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

news2024/11/15 11:06:19

目标

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.coloradmin.cn/o/399669.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

打卡小达人之路:Spring Boot与Redis GEO实现商户附近查询

在当今社会&#xff0c;定位服务已经成为了各种应用的重要组成部分&#xff0c;比如地图、打车、美食等应用。如何在应用中实现高效的附近商户搜索功能呢&#xff1f;传统的做法是将商户的经纬度信息存储在关系型数据库中&#xff0c;然后使用SQL查询语句实现附近商户搜索功能。…

Anaconda环境配置Python数据分析库Pandas的方法

本文介绍在Anaconda环境中&#xff0c;安装Python语言pandas模块的方法。 pandas模块是一个基于NumPy的开源数据分析库&#xff0c;提供了快速、灵活、易用的数据结构和数据分析工具。它的主要数据结构是Series和DataFrame&#xff0c;可以处理各种数据格式&#xff0c;如CSV、…

听客户说|东台农商银行:建立健全数据安全管理制度的探索与实践

夯实银行数据安全&#xff0c;需“规划先行、谋定后动”&#xff0c;首要工作是确立管理工作的行动纲要&#xff0c;并据此建立制度保障体系以贯彻纲要&#xff0c;而后才是具体的行动措施和日常检查、监测。从银行数据安全建设实践路径来说&#xff0c;我认为可以用“盘现状、…

markdown(.md)常用语法

markdown&#xff08;.md&#xff09;常用语法markdown常用语法常用目录标题分割线格式空格换行无序列表有序列表列表嵌套文字引用行内代码代码块字体转义斜体加粗删除线下划线功能链接todo listtypora插入图片并保存在本地包含了一些常用的MD语法和操作&#xff0c;语法不是很…

ECS 图解

旧系统执行逻辑&#xff1a;程序开发中有一个很经典的设计模式/框架 &#xff1a;MVCvc 部分是系统&#xff0c; m 是组件。 我通过名为 index 的索引访问此数据&#xff1a;现在该组件具有用于读取和写入该数据的数据。 看看源代码中的Entity 。 struct 结构体。 64位索引 &am…

STM32查看内存占用的map文件解析

STM32查看内存占用的map文件解析STM32查看内存占用的map文件解析程序内存分析在stm32中&#xff0c;通常堆向高地址增长&#xff08;向上增长&#xff09;&#xff0c;栈向低地址增长&#xff08;向下增长&#xff09;&#xff1b;1.2 flash、ROM、RAM的区别1.3 通常stm32在kei…

跨过社科院与杜兰大学金融管理硕士项目入学门槛,在金融世界里追逐成为更好的自己

没有人不想自己变得更优秀&#xff0c;在职的我们也是一样。当我们摸爬滚打在职场闯出一条路时&#xff0c;庆幸的是我们没有沉浸在当下&#xff0c;而是继续攻读硕士学位&#xff0c;在社科院与杜兰大学金融管理硕士项目汲取能量&#xff0c;在金融世界里追逐成为更好的自己。…

如何做好项目各干系人的管理及应对?

如何更好地识别、分析和管理项目关系人&#xff1f;主要有以下几个方面&#xff1a; 1、项目干系人的分析 一般对项目干系人的分析有2种方法&#xff0c; 方法一&#xff1a;权利&#xff08;影响&#xff09;&#xff0c;即对项目可以产生影响的人&#xff1b; 方法二&#xf…

终端配色-Docker容器终端

20230309 - 0. 引言 平时使用SSH&#xff0c;通常都是使用securecrt来用&#xff0c;毕竟也算是之前windows下一种使用的工具&#xff0c;在mac下使用还算方便&#xff1b;进入终端后&#xff0c;可以通过调整配色来调整编程环境。平时经常使用屎黄色的那种配色&#xff0c;毕…

Spark单机伪分布式环境搭建、完全分布式环境搭建、Spark-on-yarn模式搭建

搭建Spark需要先配置好scala环境。三种Spark环境搭建互不关联&#xff0c;都是从零开始搭建。如果将文章中的配置文件修改内容复制粘贴的话&#xff0c;所有配置文件添加的内容后面的注释记得删除&#xff0c;可能会报错。保险一点删除最好。Scala环境搭建上传安装包解压并重命…

千言数据集赛题介绍

赛题题目 通用信息抽取任务评测 将多种不同的信息抽取任务用统一的通用框架进行描述&#xff0c;着重考察相关技术方面在面对新的、未知的信息抽取任务与范式时的适应和迁移能力。 赛题介绍 信息抽取旨在将非结构化文本中的信息进行结构化&#xff0c;是自然语言处理的基础…

Highcharts 写 venn图 (韦恩图),以及解决项目中venn的报错

Highcharts 写 venn图 鼠标悬浮效果以及点击事件 效果图如下&#xff1a; 参考highcharts官网venn 具体方法 安装包依赖&#xff1a;npm install highcharts //组件中引入 import Highcharts from highcharts; // import exportingInit from highcharts/modules/export…

【项目总结】基于SSM+SpringBoot+Redis的个人博客系统项目总结

文章目录项目介绍&#xff08;开发背景&#xff09;数据库设计主要使用到的技术点前端后端自定义统一返回对象自定义拦截器加盐加密操作分页功能session持久化自定义头像的存储和获取项目编写过程中遇到的困难点困难点一&#xff08;小&#xff09;困难点二&#xff08;小&…

C++11:右值引用和移动语义

文章目录1. 左值和右值表达式1.1 概念1.2 左值和右值2. 左值引用和右值引用2.1 相互引用2.2 示例代码2.3 左值引用使用场景缺点2.4 右值引用和移动语义小结2.5 移动赋值2.6 右值引用的其他使用场景右值引用版本的插入函数3. 完美转发3.1 万能引用3.2 如何实现完美转发3.3 完美转…

u盘拔掉再插上去文件没了原因|文件恢复方法

如果您遇到了“u盘拔了再插文件变空了”的类似问题困扰&#xff0c;请仔细阅读文本&#xff0c;下面将分享几种方法来恢复u盘上丢失的文件&#xff0c;赶紧来试试&#xff01;为什么u盘拔掉再插上去文件没了“我的u盘为什么放进东西后拔出&#xff0c;再插进电脑去东西就没有了…

从零开始学架构——复杂度来源

复杂度来源——高性能 对性能孜孜不倦的追求是整个人类技术不断发展的根本驱动力。例如计算机,从电子管计算机到晶体管计算机再到集成电路计算机,运算性能从每秒几次提升到每秒几亿次。但伴随性能越来越高&#xff0c;相应的方法和系统复杂度也是越来越高。现代的计算机CPU集成…

前端——5.HTML标签_段落标签和换行标签

这篇文章&#xff0c;我们来讲解一下HTML标签中的段落标签和换行标签 目录 1.段落标签 1.1介绍 1.2实际案例 1.3小拓展 2.换行标签 2.1介绍 2.2实际案例 3.小结 1.段落标签 我们首先来讲解一下段落标签 1.1介绍 在网页中&#xff0c;要把文字有条理地显示出来&…

图像主题颜色提取(Median cut)

前言 之前想对图片素材进行分类管理&#xff0c;除了打标签&#xff0c;还有一样是通过主题色进行分类。于是开始寻找能提取主主题色的工具&#xff0c;最后找到了大名鼎鼎的 Leptonica 库&#xff0c;其中就有中位切割算法的实现。下面附上中位切割算法的其它语言版本的实现。…

keras图片数字识别入门AI机器学习

通过使用mnist&#xff08;AI界的helloworld&#xff09;手写数字模型训练集&#xff0c;了解下AI工作的基本流程。 本例子&#xff0c;要基于mnist数据集&#xff08;该数据集包含了【0-9】的模型训练数据集和测试数据集&#xff09;来完成一个手写数字识别的小demo。 mnist…

Linux内核之内存管理知识以及伙伴系统

内存管理知识以及伙伴系统一、Linux 内核架构图二、虚拟内存地址空间布局2.1、用户空间2.2、内核空间2.3、硬件层面2.4、虚拟地址空间划分2.5、用户虚拟地址空间布局2.6、进程的进程描述和内存描述符关系2.7、内核地址空间布局三、SMP/NUMA 架构3.1、SMP3.2、NUMA四、伙伴系统及…