分类: C/C++
2008-04-23 21:53:34
UDP轻松应用
作者: 郑州713所
一、概述
"用户数据报协议"(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协议传输的结构体数据。