C++ Builder 6.0中UDP的使用

编程使用,理解 专栏收录该内容
1 篇文章 0 订阅

又可以说是运用bcb中fastnet组件中的NMUDP如何进行网络数据传输

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

#include <vcl.h>
#pragma hdrstop

#include "SRData.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
Memo1->Clear();
}
//---------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
Edit3->Text=OpenDialog1->FileName;
}
Memo1->Text="";
}
//---------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(Edit3->Text=="")
{
ShowMessage("请选择一个您要传送的文件.");
return;
}
NMUDP1->RemoteHost=Edit1->Text; //设置远程主机和端口号
NMUDP1->RemotePort=StrToInt(Edit2->Text);//端口号,我看到一般博客上说最好与LocalPort是一样的,也不知道对不对?!!!
NMUDP1->ReportLevel=Nmudp::Status_Basic;//一般处于这种模式就好,我也不知道有什么意义?!!
const int ThreshHold=2048;
//载入文件流
TFileStream *Strm=new TFileStream(Edit3->Text,fmOpenRead);
char *Buffer=new char[ThreshHold];
//char Buffer[ThreshHold];
int BuffSize=Strm->Size;
int Buffers=BuffSize/ThreshHold;
for(int i=0;i<=Buffers;i++)
{
if(BuffSize>2048)
{
Strm->Read(Buffer,ThreshHold);
NMUDP1->SendBuffer(Buffer,ThreshHold,ThreshHold);//发送数据
//BuffSize-=ThreshHold;
}
else
{
Strm->Read(Buffer,BuffSize);
NMUDP1->SendBuffer(Buffer,ThreshHold,ThreshHold);
}
BuffSize-=ThreshHold;
// memset(&Buffer,0,sizeof(Buffer));
ShowMessage("hehe");
}
delete[] Buffer;
delete Strm;
Memo1->Lines->Add("");
}
//---------------------------------------
void __fastcall TForm1::NMUDP1DataReceived(TComponent *Sender,
int NumberBytes, AnsiString FromIP, int Port)
{
char *TmpBuffer=new char[NumberBytes+1];
int i;
i=0;
//读取接收到的文件流
try{
NMUDP1->ReadBuffer(TmpBuffer,NumberBytes,i);//接受数据
TmpBuffer[NumberBytes]='\0';
Memo1->Text=Memo1->Text+TmpBuffer;
}
__finally{
delete[] TmpBuffer;
}
}
//---------------------------------------


void __fastcall TForm1::NMUDP1DataSend(TObject *Sender)
{
StatusBar1->Panels->Items[0]->Text="文件传输完毕。"; 

}


我又测了下,UDP能够正确使用了,在C++ Builder下,原先的错误是IP地址不对。LocalPort和RemotePort最好一致,是因为这样不会因为搞不清那个是本地,那个是目标的端口号,而出现混乱。还有发送的变量名字搞错了,发送数据错误。。。我是点播方式进行的。用两台电脑实现的UDP通信。还有说法将IP设为255.255.255.0就可以全域广播的方式,还没有试过。。。??

  • 0
    点赞
  • 3
    评论
  • 1
    收藏
  • 扫一扫,分享海报

评论 3 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值