【MFC】实现简单UDP通信

这篇具有很好参考价值的文章主要介绍了【MFC】实现简单UDP通信。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

创建项目,初始化套接字

创建一个基于对话框的MFC项目(名称为UDP),高级功能选中Windows套接字
【MFC】实现简单UDP通信,MFC,mfc,udp,c++
这个时候在CUDP类的InitInstance()方法中就会出现这样的代码用来初始化套接字

if (!AfxSocketInit())
{
	AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
	return FALSE;
}

如果没有选中,手动添加也是可以的。

给对话框添加控件

【MFC】实现简单UDP通信,MFC,mfc,udp,c++

控件ID 关联变量名 类型 作用
IDC_EDIT1 m_edit CEdit 显示接收到的信息
IDC_EDIT2 m_msg CString 保存发送的信息
IDC_EDIT3 m_otherPort UINT 设置对方端口号
IDC_EDIT4 m_myPort UINT 设置自己的端口号
IDC_IPADDRESS m_IPAddressCtrl CIPAddressCtrl ip地址

修改控件IDC_EDIT1的一些属性
【MFC】实现简单UDP通信,MFC,mfc,udp,c++

创建CSocket类的派生类CUDPSocket

要添加虚函数OnReceive(),这个函数的作用是用来截获收到的网络数据。

void CUdpSocket::OnReceive(int nErrorCode)
{
	CString ipAdress;
	wchar_t msg[1024];
	UINT port;
	int len=ReceiveFrom(msg, 1023, ipAdress, port);
	msg[len] = '\0';
	CUDPDlg* pDlg =(CUDPDlg*) AfxGetMainWnd();
	pDlg->ShowMessage(msg, ipAdress, port);
	
	CSocket::OnReceive(nErrorCode);
}

ShowMessage()函数是在CUDPDLG中定义的一个用于显示信息的函数,用于将发送方的IP地址,端口号,发送信息和发送时间显示在IDC_EDIT1控件上

void CUdpSocket::OnReceive(int nErrorCode)
{
	// TODO: 在此添加专用代码和/或调用基类
	CString ipAdress;
	char msg[1024];
	UINT port;
	int l=ReceiveFrom(msg, 1023, ipAdress, port);
	msg[l] =0;

	CTime time = CTime::GetCurrentTime();
	CString str;
	str.Format("的%d端口向你发送消息%s:\r\n%s\r\n", port, 
		time.Format("%Y-%m-%d %H:%M:%S"),msg);
	ipAdress += str;
	CUDPDlg* pDlg =(CUDPDlg*) AfxGetMainWnd();
	int len = pDlg->m_edit.GetWindowTextLength();
	pDlg->m_edit.SetSel(len, -1);
	pDlg->m_edit.ReplaceSel(ipAdress);

	
	CSocket::OnReceive(nErrorCode);
}

响应创建按钮创建套接字

void CUDPDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
	//创建stocket
	UpdateData(true);
	bool s=m_udpSocket.Create(m_myPort, SOCK_DGRAM);
	if (0 == s)
	{
		CString str;
		str.Format("创建socket失败:%d", GetLastError());
		MessageBox(str);
	}
	else {
		GetDlgItem(IDC_BUTTON1)->EnableWindow(false);
		//如果创建成功禁用创建按钮
	}
}

SOCK_DGRAM表示的就是UDP.

响应消息发射按钮

void CUDPDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	UpdateData(true);
	CString ipAdress;
	m_IPAddressCtrl.GetWindowText(ipAdress);//获取IP地址控件上的ip地址

	if (ipAdress.IsEmpty() || ipAdress == L"0.0.0.0")
		MessageBox("请输入正确的ip地址");
	if(m_myPort==0)
		MessageBox("请输入当前主机端口号");
	if(m_otherPort==0)
		MessageBox("请输入对方端口号");
	if(m_msg.IsEmpty())
		MessageBox("请输入要发送的数据");
	m_udpSocket.SendTo(m_msg, m_msg.GetLength(), m_otherPort,ipAdress);
	CString str;
	str.Format("我向\r\n%s:%d发送消息:%s\r\n", ipAdress.GetBuffer(), m_otherPort,m_msg.GetBuffer());;
	m_edit.SetSel(m_edit.GetWindowTextLength(), -1);
	m_edit.ReplaceSel(str);
}

使用Unicode字符集会出现中文后面更着韩文的情况,这个时候可以把字符集改成多字节字符集
【MFC】实现简单UDP通信,MFC,mfc,udp,c++

实现效果

【MFC】实现简单UDP通信,MFC,mfc,udp,c++文章来源地址https://www.toymoban.com/news/detail-707112.html

到了这里,关于【MFC】实现简单UDP通信的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络原理】使用Java基于UDP实现简单客户端与服务器通信

    我们用Java实现UDP数据报套接字编程,需要借用以下API来实现 网络编程, 本质上是要操作网卡. 但是网卡不方便直接操作. 在操作系统内核中, 使用了一种特殊的叫做 “socket” 这样的文件来抽象表示网卡. 因此进行网络通信, 势必需要先有一个 socket 对象. DatagramSocket 是UDP Socket,

    2024年03月11日
    浏览(60)
  • 【网络编程】利用套接字实现一个简单的网络通信(UDP实现聊天室 附上源码)

    源IP地址(Source IP Address): 源IP地址是数据包发送方(或数据流出发点)的唯一标识符。它用于在互联网或本地网络中定位发送数据包的设备或主机。源IP地址是数据包的出发点,即数据从这个地址开始传送,向目的IP地址指示的设备发送。 在TCP/IP协议中,源IP地址通常由发

    2024年02月14日
    浏览(86)
  • Unity简单的UDP通信

    UDP通信的优势在于不要求对方强制在线,没有因为网络连接不顺畅或连接失败导致的卡顿问题;缺点也是因为不能判断对方是否在线,导致整个连接不可靠,需要通过自定义代码来进行反馈。 下列代码就是一个简单的UDP通信基类,继承此类后,需调用 InitSocket 方法初始化才可

    2024年02月11日
    浏览(34)
  • 操作系统——MFC实现进程创建和通信2

    我接着上篇博客讲,如果没有构建项目的童鞋请移步到操作系统——MFC实现进程创建和通信1 实现进程通信的方法有很多,我们先用一个比较简单的方法实现一下。 window.postMessage() 方法可以安全地实现跨源通信。通常,对于两个不同页面的脚本,只有当执行它们的页面位于具

    2024年02月07日
    浏览(40)
  • 【嵌入式学习】网络通信基础-项目篇:简单UDP聊天室

    源码已在GitHub开源:0clock/LearnEmbed-projects/chat 客户端功能: 上线发送登录的用户名[yes] 发送消息和接收消息[yes] quit退出 服务器端功能: 统计用户上线信息,放入链表中[yes] 接收用户信息并给其他用户发送消息[yes] 服务器也支持给所有用户群发消息[yes] 接收下线提醒

    2024年01月25日
    浏览(64)
  • 实现UDP通信

    server.c client.c Makefile 编译文件

    2024年02月12日
    浏览(30)
  • c实现 udp通信

    1.创建对象 int udp_socket = socket(AF_INET,SOCK_DGRAM,0); AF_INET    网络通信协议 SOCK_DGRAM  传输协议 属性默认 0 2.想接收信息就需要绑定地址信息 struct sockaddr_in server_addr ; server_addr . sin_family = AF_INET ; server_addr . sin_port = htons ( 端口 ); //自选 server_addr . sin_addr . s_addr = INADDR_ANY ; // 所 有网

    2023年04月08日
    浏览(28)
  • 【Java】实现UDP通信

    🎈博客主页:🌈我的主页🌈 🎈欢迎点赞 👍 收藏 🌟留言 📝 欢迎讨论!👏 🎈本文由 【泠青沼~】 原创,首发于 CSDN🚩🚩🚩 🎈由于博主是在学小白一枚,难免会有错误,有任何问题欢迎评论区留言指出,感激不尽!🌠个人主页 TCP —传输控制协议,提供的是面向连接、

    2024年02月07日
    浏览(39)
  • QT实现UDP通信

    一、UDP简介 1)UDP(User Datagram Protocol,用户数据报协议) UDP是一个轻量级、不可靠、面向数据报的、无连接的传输层协议,多用于可靠性要求不严格,不是非常重要的传输,如直播、视频会议等等。 2)Qt中QUdpSocket类继承自QAbstractSocket,用来发送和接收UDP数据报,”Socket”即套

    2024年02月11日
    浏览(35)
  • MFC 简单的SendMessage子窗口调用主窗口函数(消息映射)的实现

    只说实现,不讲原理 环境:VS2022 community版 0.先建立一个全局调用的主对话框的指针g_pMainThis; 1.建立一个基于对话框的MFC工程; 2.在预编译头文件“phc.h”或“stdafx.h”定义消息调用的宏,其值要“WM_USER+100”以上; 3.在主对话框类建立消息映射的功能实现函数; 4.建立一个子

    2024年02月11日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包