如何用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();
都设置完成后,打开网络调试助手,设置好配置条件,连接
设置完成后,运行程序,可以在网络调试助手界面上显示程序发过来的数据。
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<TImage*> 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服务实现客户端与服务器交互信息.