C++ Builder 6.0中UDP的使用

又可以说是运用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就可以全域广播的方式,还没有试过。。。??

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值