包已经收到,为什么总是读取不到UDP包的内容?(附代码)
点击一个按钮自己给自己发包,确信包已经收到,但是不知道怎么读取内容。
//Unit1.h头文件中定义一个结构体
typedef struct {
int TAG;
int LEN;
char* BUFFER;
}STN_HEAD;
//Unit1.cpp文件中发送部分
void __fastcall TForm1::Button3Click(TObject *Sender)
{
AnsiString ip=Edit1->Text; //这里输入是自己的IP
TStringList *dl=new TStringList(); //准备三组字符串,等会随机选择一个发送
dl->Add("DSDSDSDSDSDSDDSDFrom:192.168.1.29") ;
dl->Add("洒洒的三分三分2洒的12saa12啊");
dl->Add("搜索221斯蒂芬");
int j=random(3);
AnsiString data=dl->Strings[j];//随机选择内容体
STN_HEAD *packet=new STN_HEAD;
packet->TAG=(i+j);
packet->LEN= data.Length();
packet->BUFFER=new char[packet->LEN+1];
memcpy(packet->BUFFER,data.c_str(),data.Length());
int test=sizeof(STN_HEAD)+data.Length();
IdUDPServer1->SendBuffer(ip,7788,&packet,test);
Memo1->Lines->Add(AnsiString(packet->TAG)+":"+AnsiString((char*)packet->BUFFER)); //显示已发送的内容
delete packet;
delete dl;
}
//接受部分,以下代码不知哪里错,读不出整型数据和字符数据
void __fastcall TForm1::IdUDPServer1UDPRead(TObject *Sender,
TStream *AData, TIdSocketHandle *ABinding)
{
TMemoryStream *mio=new TMemoryStream();
int size=AData->Size; //长度和发送的一样,应该没有丢失数据
mio->SetSize(size);
mio->LoadFromStream(AData);
STN_HEAD *packet=new STN_HEAD;
//mio->Read((void*)packet,12); //这样读取也不行
mio->ReadBuffer(&packet->TAG,sizeof(int));
mio->ReadBuffer(&packet->LEN,sizeof(int));
packet->BUFFER=new char[packet->LEN+1];
mio->ReadBuffer(&packet->BUFFER,packet->LEN);
Memo2->Lines->Add(AnsiString(packet->TAG)+":"+AnsiString((char*)packet->BUFFER)); //显示收到内容
delete packet->BUFFER;
delete packet;
delete mio;
}
请高手看看,怎么读取一个结构体,里面有整型,有不定长度的缓冲区数据?

