CBuilder6.0采用NMUDP控件写UDP发送程序,最多只能发送8K的数据,求高手指导
CBuilder6.0采用NMUDP控件写UDP发送程序,最多只能发送8K的数据,求高手指导。贴代码如下:
//发送数据
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if(Edit1->Text == "")
{
ShowMessage("请选择一个文件进行传送!");
return;
}
if(Edit2->Text == ""||Edit3->Text == "")
{
ShowMessage("请正确填写远程主机IP和端口号");
return;
}
NMUDP1->RemoteHost = Edit2->Text;
NMUDP1->RemotePort = StrToInt(Edit3->Text);
NMUDP1->ReportLevel = Status_Basic;
Memo2->Clear();
//载入文件流
TFileStream *Strm = new TFileStream(Edit1->Text,fmOpenRead);
const int bufLength = 2048;
char *Buffer = new char[bufLength];
int BuffSize = Strm->Size;
int Buf = BuffSize/bufLength;
for(int i=0;i<Buf+1;i++)
{
if(BuffSize>bufLength)
{
Strm->Read(Buffer,bufLength);
NMUDP1->SendBuffer(Buffer,bufLength,bufLength);
}
else
{
Strm->Read(Buffer,BuffSize);
NMUDP1->SendBuffer(Buffer,BuffSize,BuffSize);
}
BuffSize=BuffSize-bufLength;
}
delete Buffer;
delete Strm;
接收方
void __fastcall TForm1::NMUDP1DataReceived(TComponent *Sender,
int NumberBytes, AnsiString FromIP, int Port)
{
char *TmpBuff = new char[NumberBytes+1];
int i ;
//读取接收到的文件流
NMUDP1->ReadBuffer(TmpBuff,NumberBytes,i);
TmpBuff[NumberBytes] = '\0';
Memo2->Text = Memo2->Text+TmpBuff;
int iFileHandle;
if(!FileExists("E:\\dd.txt"))
iFileHandle = FileCreate("E:\\dd.txt");
else
{
iFileHandle = FileOpen("E:\\dd.txt",fmOpenReadWrite);
}
FileSeek(iFileHandle,0,2);
FileWrite(iFileHandle,TmpBuff,NumberBytes+1);
FileClose(iFileHandle);
delete TmpBuff;
}