游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1552|回复: 1

UDP轻松应用 wxh zt

[复制链接]

1367

主题

1993

帖子

2118

积分

金牌会员

Rank: 6Rank: 6

积分
2118
发表于 2004-11-11 22:27:00 | 显示全部楼层 |阅读模式
一、概述
  "用户数据报协议"(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=&amplatform;

        //数据发送
        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协议传输的结构体数据。

三、图像描述
  发送数据的工程和接收数据的工程:

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

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

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

0

主题

10

帖子

10

积分

新手上路

Rank: 1

积分
10
QQ
发表于 2004-11-12 10:33:00 | 显示全部楼层

Re:UDP轻松应用 wxh zt

不错不错,很明晰
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-12-23 05:39

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表