这两天一直在找MFC下用CSocket实现UDP通信,尝试了网上不少的资料都没有成功,可能是自己在什么地方出错了。最后参考http://www.cnblogs.com/nuaa/archive/2011/12/22/2298495.html顺利实现了。自己也顺便作一些总结,希望可以利人利己。
源代码请到此处下载。基本界面如下:

UDP通信时双方地位是对等的,不用像TCP那样要在服务器端设置一个监听Socket。
第一步:调用Create函数在本机上创建一个Socket。
实例中用到:m_pSocket->Create(m_localPortNum, SOCK_DGRAM);其中m_localPortNum代表创建的Socket关联到本机上的端口号,SOCK_DGRAM代表是UDP通信。
第二步:调用Bind函数让新创建的Socket与远程主机的指定端口通信。
实例中用到:m_pSocket->Bind(m_peerPortNum, m_strPeerIPaddr);其中m_peerPortNum是远程主机中UDP通信的端口号,m_strPeerIPaddr代表远程主机的IP地址。
UDP通信的双方通过第一步和第二步,就知道信息该发送到哪个IP地址和端口号了,接下来该实际发送数据了。
第三步:准备好数据调用SendTo函数,将数据发送到远程主机上。
实例中用到:m_pSocket->SendTo(m_dataToSend, m_dataToSend.GetLength(),m_peerPortNum, m_strPeerIPaddr);其中第一个参数指定了要发送的数据,第二个参数指定了发送数据的长度,第三个参数指定了远程主机的端口号,第四个参数指定了远程主机IP地址。
第四步:数据接收方会自动启用OnReceive函数来响应,只需在OnReceive函数中调用ReceiveFrom函数来读取数据即可。实例中改写了CUdpSocket类的OnReceive,目的就是调用AfxMessgeBox显示接受到数据。
void CUdpSocket::OnReceive(int nErrorCode)
{
// TODO: Add your specialized code here and/or call the base class
TCHAR recBuf[1024];
int len = sizeof(SOCKADDR_IN);
ZeroMemory(recBuf, sizeof(recBuf));
int recBytes = ReceiveFrom(recBuf, 1023, (SOCKADDR*)&m_clientAddr, &len, 0);
if (0 == recBytes)
{
AfxMessageBox(TEXT("UDP连接已经关闭!"));
}
else if (SOCKET_ERROR == recBytes)
{
AfxMessageBox(TEXT("接受数据失败!"));
}
else
{
CString strBuf;
strBuf.Format(TEXT("收到数据: %s"), recBuf);
AfxMessageBox(strBuf, MB_OK);
}
CSocket::OnReceive(nErrorCode);
}
分享到:
相关推荐
总的来说,这个MFC项目展示了如何利用`CSocket`类来处理UDP通信,虽然这不是其原始设计用途,但通过适当的方式来实现,可以为开发者提供一种在MFC环境中进行UDP通信的途径。在实际开发过程中,理解网络协议的原理和...
在本文中,我们将深入探讨如何在...总的来说,MFC的`CSocket`类提供了一个方便的接口,帮助开发者在Windows环境中使用C++轻松地实现UDP通信。通过理解和实践这些基本步骤,你可以创建出稳定且功能丰富的UDP应用。
在这个场景中,我们将探讨如何利用MFC(Microsoft Foundation Classes)中的`CSocket`类来实现UDP广播通信。 `CSocket`是MFC提供的一种用于处理Winsock(Windows Socket)接口的抽象类,它简化了TCP/IP编程,特别是...
这个项目是学习MFC与网络编程结合的好起点,有助于理解网络通信的基本原理,以及如何在实际应用中利用MFC简化开发流程。在实际项目中,还可以根据需求扩展功能,如添加多播支持、错误重传机制等。
由于其无需建立连接的特性,UDP广播在多设备通信中十分常见。 首先,我们来看`BroadcastServer`,这是UDP广播的发送端。`CSocket`是MFC(Microsoft Foundation Classes)中的一个类,它封装了Windows Sockets API,...
在本文中,我们将深入探讨如何在Microsoft Foundation Class (MFC) 框架下实现UDP通信。MFC是微软提供的一套C++类库,它为Windows应用程序开发提供了丰富的功能,包括对网络通信的支持。UDP(User Datagram Protocol...
在这个主题中,我们将深入探讨如何使用CSocket类来实现在局域网内的TCP和UDP通信,并且重点是同步(阻塞)模式。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它确保数据的顺序...
UDP通信中可能出现各种错误,如网络中断、数据丢失等。MFC的`CSocket`类提供了错误处理机制,如`OnClose`函数用于处理套接字关闭的情况,`OnSocketError`处理一般错误。 7. **多线程**: 对于复杂的UDP应用,可能...
在本文中,我们将深入探讨如何使用...总结,通过以上步骤和知识点,我们可以利用MFC在VS2008中实现一个既能作为服务器又能作为客户端的UDP通信程序。理解这些概念和实践将有助于开发出高效且稳定的网络应用程序。
摘要:网络上基于socket通信的例子很多,但要么代码不好用,要么...也可以和其他socket程序通信,测试与网上下载的“TCPUDP端口调试工具SocketTool V2.2绿色版”通信没有问题。 ; 作者技术交流邮箱: sa978bl@139.com
本文将深入探讨一个基于C++、MFC(Microsoft Foundation Classes)框架的经典实例,它利用SOCKET API实现了UDP(User Datagram Protocol)通信。这个实例对于理解和应用UDP协议原理具有很高的价值。 **UDP协议简介*...
它提供了一种简单而强大的接口来处理网络通信中的各种任务。下面将详细介绍如何使用`CSocket`类来实现实象棋游戏中的网络通信功能。 ##### 1. 构造一个`CSocket`对象 `CSocket`对象的构造是整个网络通信流程的基础...
在本项目中,"基于MFC的UDP“打洞”通信服务端程序"利用了MFC中的网络编程组件CSocket,实现了UDP(User Datagram Protocol)的打洞技术,这是一种解决NAT(Network Address Translation)穿透问题的技术,以便在...
在本文中,我们将深入探讨如何在Microsoft Foundation Class (MFC) 框架下使用Socket技术来实现广播通信。广播通信是一种网络通信模式,其中一台设备可以向同一网络中的所有设备发送消息,而无需知道每个设备的特定...
总结来说,通过MFC实现的UDP源码示例,开发者可以学习到如何在Windows环境中构建基本的UDP通信程序,了解如何使用CSocket类进行数据的发送和接收,以及如何处理可能的网络错误。尽管UDP不如TCP可靠,但它在特定场景...
学习这个项目,你可以了解到如何在C++中使用MFC的CSocket类来创建UDP通信程序,包括建立socket、绑定端口、设置IP地址、发送和接收数据的基本步骤,以及如何处理网络通信中的各种情况。这将对理解网络编程原理和实践...
本项目以C++编程语言为基础,利用MFC(Microsoft Foundation Classes)库中的CSocket类,实现了基于UDP(User Datagram Protocol)的P2P通信,同时构建了一个多用户聊天室。 1. **P2P协议设计与实现**: P2P协议是...