zoukankan      html  css  js  c++  java
  • MFC中利用CSocket实现UDP通信

         这两天一直在找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);
    }
  • 相关阅读:
    logback使用
    数据库阿里连接池 配置
    expect.js
    shim和polyfill有什么区别
    console.js还有浏览器不支持?
    vue项目如何实现剪切板功能--vue-clipboard2
    跟我一起使用webpack给一个开源项目添加一个运行入口
    Axure之添加点击页面
    Axure之母版窗口
    【react】react-reading-track
  • 原文地址:https://www.cnblogs.com/java20130722/p/3207156.html
Copyright © 2011-2022 走看看