如何用C++Builder控件实现UDP通信

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用C++Builder控件实现UDP通信相关的知识,希望对你有一定的参考价值。

    打开C++Builder编程软件,新建一个项目,新建一个窗口,在工具栏上找到UDPSocket控件

    在图中,选择【Internet】页面,出面控件列表,选择【UDPSocket】控件,在倒数第三个,图中都时行了标注,在新窗口中,按住鼠标左键,拖出控件

    选中该控件,在属性列表中设置其属性

    设置LocalHost(为客户端的IP地址)、RemoteHost(服务器端的IP地址)、RemotePort(服务器端的通信端口)的值。双击窗口中的UDPSocket控件

    弹出代码编写界面后,编写UDPSocket控件连接代码:

    //---------------------------------------------------------------------------

    void __fastcall TForm7::UdpSocket1Connect(TObject *Sender)

            Label2->Caption="连接中...";

            AnsiString s="abcdef";

            Char *Buffer;

            Buffer[0]=0x11;     // 数据块长度

            Buffer[1]=0x11;    // 重置命令

            Buffer[2]=0x11;     // 当前版本号

            Buffer[3]=0x11;     //重置结果,应答时有效

            Buffer[4]=\'\\0\';

            //发送数据

            //UdpSocket1->SendBuf(Buffer,sizeof(Buffer));

            UdpSocket1->Sendln(s,"");

           Label2->Caption="发送连接报文...";

    代码编写完成后,添加触发按钮,在窗口中添加【确定】和【退出】按钮

    分别双击【确定】和【退出】按钮,跳转到代码编写界面。点击【确定】按钮,触发UDP连接事件,代码如下:

            //发送设置报文

            //UdpSocket1->Active=true;

            Label2->Caption="开始发送报文...";

            UdpSocket1->Open();

    都设置完成后,打开网络调试助手,设置好配置条件,连接

    设置完成后,运行程序,可以在网络调试助手界面上显示程序发过来的数据。

参考技术A 打开C++Builder编程软件,新建一个项目,新建一个窗口,在工具栏上找到UDPSocket控件,如图

2
在图中,选择【Internet】页面,出面控件列表,选择【UDPSocket】控件,在倒数第三个,图中都时行了标注,在新窗口中,按住鼠标左键,拖出控件,如图

3
选中该控件,在属性列表中设置其属性,如图

4
设置LocalHost(为客户端的IP地址)、RemoteHost(服务器端的IP地址)、RemotePort(服务器端的通信端口)的值。双击窗口中的UDPSocket控件,出现如图界面

5
弹出代码编写界面后,编写UDPSocket控件连接代码:
//---------------------------------------------------------------------------
void __fastcall TForm7::UdpSocket1Connect(TObject *Sender)

Label2->Caption="连接中...";
AnsiString s="abcdef";
Char *Buffer;
Buffer[0]=0x11; // 数据块长度
Buffer[1]=0x11; // 重置命令
Buffer[2]=0x11; // 当前版本号
Buffer[3]=0x11; //重置结果,应答时有效
Buffer[4]='\0';
//发送数据
//UdpSocket1->SendBuf(Buffer,sizeof(Buffer));
UdpSocket1->Sendln(s,"");
Label2->Caption="发送连接报文...";

6
代码编写完成后,添加触发按钮,在窗口中添加【确定】和【退出】按钮,如图

7
分别双击【确定】和【退出】按钮,跳转到代码编写界面。点击【确定】按钮,触发UDP连接事件,代码如下:
//发送设置报文
//UdpSocket1->Active=true;
Label2->Caption="开始发送报文...";
UdpSocket1->Open();
【退出】按钮的事件如图

8
都设置完成后,打开网络调试助手,设置好配置条件,连接,如图

9
设置完成后,运行程序,可以在网络调试助手界面上显示程序发过来的数据。
参考技术B 打开C++Builder编程软件,新建一个项目,新建一个窗口,在工具栏上找到UDPSocket控件,如图

在图中,选择【Internet】页面,出面控件列表,选择【UDPSocket】控件,在倒数第三个,图中都时行了标注,在新窗口中,按住鼠标左键,拖出控件,如图

选中该控件,在属性列表中设置其属性,如图

设置LocalHost(为客户端的IP地址)、RemoteHost(服务器端的IP地址)、RemotePort(服务器端的通信端口)的值。双击窗口中的UDPSocket控件,出现如图界面

弹出代码编写界面后,编写UDPSocket控件连接代码:
//---------------------------------------------------------------------------
void __fastcall TForm7::UdpSocket1Connect(TObject *Sender)

Label2->Caption="连接中...";
AnsiString s="abcdef";
Char *Buffer;
Buffer[0]=0x11; // 数据块长度
Buffer[1]=0x11; // 重置命令
Buffer[2]=0x11; // 当前版本号
Buffer[3]=0x11; //重置结果,应答时有效
Buffer[4]='\0';
//发送数据
//UdpSocket1->SendBuf(Buffer,sizeof(Buffer));
UdpSocket1->Sendln(s,"");
Label2->Caption="发送连接报文...";

代码编写完成后,添加触发按钮,在窗口中添加【确定】和【退出】按钮,如图

分别双击【确定】和【退出】按钮,跳转到代码编写界面。点击【确定】按钮,触发UDP连接事件,代码如下:
//发送设置报文
//UdpSocket1->Active=true;
Label2->Caption="开始发送报文...";
UdpSocket1->Open();
【退出】按钮的事件如图

都设置完成后,打开网络调试助手,设置好配置条件,连接,如图
步骤阅读
设置完成后,运行程序,可以在网络调试助手界面上显示程序发过来的数据。

C++ Builder如何用向量构建动态对象?

【中文标题】C++ Builder如何用向量构建动态对象?【英文标题】:C++ Builder how to build dynamic Objects with vector? 【发布时间】:2016-01-11 18:37:10 【问题描述】:

我正在 C++ Builder 中开发 IOS 应用程序。我的问题是如何在 for 循环中构建 TImages。我公开声明了向量:

#include <vector>

std::vector<TImage*> Image(c); // public declaration 

void __fastcall TForm1::Button2Click(TObject *Sender)

 for (int i = 0; i < c ; i++)

    c = 5 // c should be send to te array
    Image[i] = new TImage(this); // I tried it this way but when i click the button i get an acess violence error
    Image[i]->Parent = BoardItem ;
    Image[i]->Height = 20 ; 
    Image[i]->Width = 20 ; 
   

那么如何使用向量在 for 循环中创建图像?

Dynamic alocation an array of Images in C++ Builder 我查找了该问题的最后一个答案,但没有描述如何循环执行。

【问题讨论】:

当你做std::vector&lt;TImage*&gt; Image(c);c的值是多少? 感谢您的回答,但我的问题已经解决了:) 请将您得到的答案作为答案,以帮助他人。 @JesseWatZ 我的帮助不足以勾勒出来吗? 当我评论时我没有意识到你做了一个。 【参考方案1】:

// c should be send to te array

如果你改变变量c的值,它不会改变数组的大小。

您必须在Image 向量上调用resize() 来更改大小,但这并不适合。最好写类似

void TForm1::ClearImage() 
 for (int i = 0; i < Image.size(); ++i) 
     delete Image[i];
 
 Image.clear();


void __fastcall TForm1::Button2Click(TObject *Sender)

 ClearImage();
 c=5;
 for (int i = 0; i < c ; i++)

    Image.push_back(new TImage(this));
    Image.back()->Parent = BoardItem ;
    Image.back()->Height = 20 ; 
    Image.back()->Width = 20 ; 
   

【讨论】:

我如何命名图像?他们不能有相同的名字吗?不都叫Image吗? 虽然也是我的第一个,但他已经创建了一个包含 5 个默认构造元素的向量。 多亏了这一切都很好,但还剩下一个问题。当我在上面的循环中删除图像时,为什么我必须 Image.clear() ? @Philip1895 您删除了之前使用new 创建的对象。需要clear() 来重置vector 好的,谢谢,但我不需要在销毁表单上也清除它吗?

以上是关于如何用C++Builder控件实现UDP通信的主要内容,如果未能解决你的问题,请参考以下文章

c++编写UDP客户/服务器程序,要求:使用udp服务实现客户端与服务器交互信息.

如何用c++builder 编写多线程

cbuilder中,UDP控件,在双网卡的计算机上,如何发送数据

如何用udp协议实现tcp协议?

如何用C++实现C的这个功能

C++ Builder托盘控件