c++通信---最简单的UDP程序

转自:http://www.vckbase.com/index.php/wv/1004

一、概述

"用户数据报协议"(User Datagram Protocol,简称UDP)是基于无连接的通信协议,不保证可靠数据的传输;"传输控制协议"(Transmission Cotrol Protocol,简称TCP)是基于连接的通信协议,可提供个两台计算机之间可靠无差错的数据传输。但是UDP能够向若干台目标计算机发送数据;接收发自若干个源计算机的数据。而在多台计算机构成的仿真或控制系统中,经常会出现多台计算机进行数据传输,所以在仿真或控制软件中采用UDP协议的较多。

二、代码说明

为了便于说明仿真或控制中对多个变量的传输,采用结构体的数据结构形式。创建两个工程分别为发送Send工程和接收工程。其中发送数据的工程代码为:

01. void CSendDlg::OnButtonSend() //发送数据
02. {
03.       
04.     //发送数据、对象定义
05.     struct _PLATFORM
06.         {
07.             int err_num;//故障代码  
08.             //控制(仿真)参数
09.             int sj;
10.             int hy;
11.             int zy; 
12.         } Platform,*pPlatform;
13.     CSocket m_SendSocket;//构造一个套接字对象
14.   
15.         //发送数据的初始化
16.     Platform.err_num=0;//系统正常
17.     Platform.sj=200;
18.     Platform.hy=300;
19.     Platform.zy=100;
20.     pPlatform=&Platform;
21.   
22.     //数据发送
23.     m_SendSocket.Create(2330,SOCK_DGRAM);//创建一个套接字句柄(UDP)
24.     m_SendSocket.SendTo( pPlatform,sizeof(Platform),3550,"127.0.0.1");//发送数据给本地计算机
25. }

接收数据的工程代码为:

01. void CReceiveDlg::OnButtonReceive() 
02. {
03.       
04.     //数据、对象定义
05.     struct _PLATFORM1//为了区别于发送数据的数据结构
06.         {
07.             int err_num1;//故障代码 
08.               
09.             //控制(仿真)参数
10.             int sj1;
11.             int hy1;
12.             int zy1;    
13.         } Platform1,*pPlatform1;
14.     CSocket m_ReceiveSocket;
15.     char *buff1[256];
16.     CString str1;
17.     CString str2;
18.     CString str3;
19.     CString str4;
20.   
21.          //接收数据
22.     m_ReceiveSocket.Create(3550,SOCK_DGRAM);
23.     m_ReceiveSocket.Receive(buff1,256);
24.   
25.     //接收数据的测试
26.     pPlatform1=(struct _PLATFORM1*)buff1;//非常关键
27.     str1.Format("%d",Platform1.err_num1=pPlatform1->err_num1);
28.     str2.Format("%d",Platform1.sj1=pPlatform1->sj1);
29.     str3.Format("%d",Platform1.hy1=pPlatform1->hy1);
30.     str4.Format("%d",Platform1.zy1=pPlatform1->zy1);
31.     AfxMessageBox(str1);
32.     AfxMessageBox(str2);
33.     AfxMessageBox(str3);
34.     AfxMessageBox(str4);
35. }

程序执行时,要先触发"接受数据"按钮再触发"发送数据"按钮可以得到通过UDP协议传输的结构体数据。

三、图像描述

发送数据的工程和接收数据的工程如图一和图二所示:

图一 发送数据界面图

创建一个按钮,ID为"IDC_BUTTON_SEND",标题为"发送数据"。

 

图二 接收数据界面图

创建一个按钮,ID为"IDC_BUTTON_RECEIVE",标题为"接收数据"。右边的消息对话框为接收的数据显示。

四、结束语

本文为了简单的描述UDP通讯的过程,将发送数据和接收的数据结构和套接字都定义在对应的消息函数体内,一般声明是放在头文件中的。发送数据和接收数据仅通过调用套接字的三个函数Create()、SendTo()和Receive()就满足了仿真和控制参数数据的传输,应用起来简单易行。

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值