怪事阿 高手指点了马上给分
最近遇到一个怪事,在一个函数中前面的SendBuf可以执行成功,后面的却不行,以下是代码:
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
TCustomWinSocket *Socket)
{int ulen,nlen;
char uname[17];
char nname[17];
int sex;
int totalsendlen=0;
int sendlen=0;
AnsiString myrecv,commandflag;
myrecv=Socket->ReceiveText();
strcpy(recvstr,myrecv.c_str());
commandflag=myrecv.SubString(1,3);
//Memo1->Lines->Add(AnsiString(recvstr));
if(commandflag=="LI_") //login
{ int i;
if(ServerRoom->PlayerList->Count>=ServerRoom->MaxNumOfPlayer)
{return ;
}
ulen=recvstr[3];
nlen=recvstr[4+ulen];
for(i=0;i<ulen;i++)
{uname[i]=recvstr[4+i];
}
uname[i]='\0';
for(i=0;i<nlen;i++)
{nname[i]=recvstr[4+ulen+1+i];
}
nname[i]='\0';
sex=recvstr[4+ulen+nlen+1];
Player *tmp;
for(int j=0;j<ServerRoom->PlayerList->Count;j++)
{tmp=(Player *)ServerRoom->PlayerList->Items[j];
if(strcmp(uname,tmp->username)==0)
{sendstr[0]='N';
sendstr[1]='L';
sendstr[2]='_';
sendstr[3]='\0';
Socket->SendBuf(sendstr,4);
return;
}
}
tmpplayer=new Player(uname,nname,sex);
Socket->Data=tmpplayer;
ServerRoom->NumOfPlayer++;
sendstr[0]='U';
sendstr[1]='R';
sendstr[2]='_';
sendstr[3]=ulen;
strcpy(&sendstr[4],uname);
sendstr[4+ulen]=nlen;
strcpy(&sendstr[4+ulen+1],nname);
sendstr[4+ulen+1+nlen]=tmpplayer->sex;
sendstr[4+ulen+1+nlen+1]=tmpplayer->state;
sendstr[4+ulen+1+nlen+1+1]='\0';
for(int j=0;j<ServerSocket1->Socket->ActiveConnections;j++)
{sendlen=0;
totalsendlen=0;
while(totalsendlen<strlen(sendstr)+1)
{sendlen=ServerSocket1->Socket->Connections[j]->SendBuf(sendstr+totalsendlen,strlen(sendstr)+1-totalsendlen);
if(sendlen==-1)
{totalsendlen+=0;
}
else
{totalsendlen+=sendlen;
}
}
//ServerSocket1->Socket->Connections[j]->SendText(AnsiString(" "));
}
/*问题就在这儿了,上面的代码成功执行,下面的程序执行了但是好像没有发送出去,反正接受方没有收到*/
sendstr[0]='C';
sendstr[1]='H';
sendstr[2]='_';
char *come="] come in!";
sendstr[3]=1+ulen+strlen(come);
sendstr[4]='[';
strcpy(&sendstr[5],uname);
strcpy(&sendstr[5+ulen],come);
sendstr[5+ulen+strlen(come)]='\0';
int kk=strlen(sendstr);
for(int j=0;j<ServerSocket1->Socket->ActiveConnections;j++)
{sendlen=0;
totalsendlen=0;
while(totalsendlen<strlen(sendstr)+1)
{sendlen=ServerSocket1->Socket->Connections[j]->SendBuf(sendstr+totalsendlen,strlen(sendstr)+1-totalsendlen);
if(sendlen==-1)
{totalsendlen+=0;
}
else
{totalsendlen+=sendlen;
}
}
//ServerSocket1->Socket->Connections[j]->SendText(AnsiString(" "));
}
Memo1->Lines->Add(AnsiString(&sendstr[4]));
}
else if(commandflag=="CH_") //chat
{
}
backbuffer->Canvas->Draw(0,0,tmpbuffer);
ServerRoom->drawplayer(backbuffer);
Image1->Canvas->Draw(0,0,backbuffer);
}