一、概述
"用户数据报协议"(User Datagram Protocol,简称UDP)是基于无连接的通信协议,不保证可靠数据的传输;"传输控制协议"(Transmission Cotrol Protocol,简称TCP)是基于连接的通信协议,可提供个两台计算机之间可靠无差错的数据传输。但是UDP能够向若干台目标计算机发送数据;接收发自若干个源计算机的数据。而在多台计算机构成的仿真或控制系统中,经常会出现多台计算机进行数据传输,所以在仿真或控制软件中采用UDP协议的较多。
二、代码说明
为了便于说明仿真或控制中对多个变量的传输,采用结构体的数据结构形式。创建两个工程分别为发送Send工程和接收工程。其中发送数据的工程代码为:
void CSendDlg::OnButtonSend() //发送数据
{
//发送数据、对象定义
struct _PLATFORM
{
int err_num;//故障代码
//控制(仿真)参数
int sj;
int hy;
int zy;
} Platform,*pPlatform;
CSocket m_SendSocket;//构造一个套接字对象
//发送数据的初始化
Platform.err_num=0;//系统正常
Platform.sj=200;
Platform.hy=300;
Platform.zy=100;
pPlatform=&Platform;
//数据发送
m_SendSocket.Create(2330,SOCK_DGRAM);//创建一个套接字句柄(UDP)
m_SendSocket.SendTo( pPlatform,sizeof(Platform),3550,"127.0.0.1");//发送数据给本地计算机
}
接收数据的工程代码为:
void CReceiveDlg::OnButtonReceive()
{
//数据、对象定义
struct _PLATFORM1//为了区别于发送数据的数据结构
{
int err_num1;//故障代码
//控制(仿真)参数
int sj1;
int hy1;
int zy1;
} Platform1,*pPlatform1;
CSocket m_ReceiveSocket;
char *buff1[256];
CString str1;
CString str2;
CString str3;
CString str4;
//接收数据
m_ReceiveSocket.Create(3550,SOCK_DGRAM);
m_ReceiveSocket.Receive(buff1,256);
//接收数据的测试
pPlatform1=(struct _PLATFORM1*)buff1;//非常关键
str1.Format("%d",Platform1.err_num1=pPlatform1->err_num1);
str2.Format("%d",Platform1.sj1=pPlatform1->sj1);
str3.Format("%d",Platform1.hy1=pPlatform1->hy1);
str4.Format("%d",Platform1.zy1=pPlatform1->zy1);
AfxMessageBox(str1);
AfxMessageBox(str2);
AfxMessageBox(str3);
AfxMessageBox(str4);
}
程序执行时,要先触发"接受数据"按钮再触发"发送数据"按钮可以得到通过UDP协议传输的结构体数据。