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

目标

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文件保存接收数据。

具体的办法往后继续说。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

考琪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值