client端连接按钮事件:
void __fastcall TForm2::ConnectClick(TObject *Sender)
{
Clients * Clt=new Clients; //clients 是结构体,记录客户端信息
strcpy(Clt->Login_sign,"LOGIN");
strcpy(Clt->Name,Editname->Text.c_str());
strcpy(Clt->Ip,GStack->LocalAddress.c_str());
Client->Port=StrToInt(Edit2->Text);
Client->Binding->IP="0.0.0.0";
Client->Binding->Port=StrToInt(Edit2->Text);
Client->Binding->Bind();
Client->Active=true;
Client->SendBuffer(Clt,Cltlength); 发送客户信息
delete Clt;
}
client端发消息按钮
void __fastcall TForm2::SendClick(TObject *Sender)
{
Client->Send(Edit1->Text);//向server 发消息
}
server 端onread事件:
void __fastcall TForm1::ServerUDPRead(TObject *Sender, TStream *AData,
TIdSocketHandle *ABinding)
{
Clients * Clt=new Clients; //一下两行如果是登录,即第一次触发onread事件,接收客户信息,
AData->Read(Clt,AData->Size);
char Msg[1024]; //如果向server发送消息,记录在Msg 里
AData->Read(Msg,AData->Size);
if(String(Clt->Login_sign).SubString(1,5)=="LOGIN") //如果是登录
{
String Astring="welcome you:";
Listclient->Items->Add(String(Clt->Name));
Astring+=String(Clt->Name);
Server->Send(ABinding->PeerIP,ABinding->PeerPort,Astring);
Server->Broadcast(String(Clt->Name)+"enter into the chart room",8090);
}
else //不是登录,是发消息
Memo1->Lines->Add(String(Msg));
}
执行程序,在client端发现点击登录按钮,onread事件触发正常,但再点击发送消息按钮,server端接收不到任何信息,好像onread事件没有触发.这时何故?如果把client端登录事件去掉,执行client->Active=true,然后执行发送信息事件则,server端onerad事件正常.百思不得其解啊!
顶