用Socket连继发送信息,造成数据丢失怎么办?
我是用BCB5自带的TClientSocket与TServerSocket写的程序:
客户登录服务器时,我就把产生的相应Socket保存到一个数组CliSck[]中,之后我把某个客户端发来的信息转发给其它客户端。写了两段转发信息的代码如下:
注1:其中 sckServer 是 TServerSocket对象
注2:我是在一台机上做的调试
《代码1》
for(i=0;i<sckServer->Socket->ActiveConnections;i++)
{
sckServer->Socket->Connections[i]->SendBuf(Buf,32);
}
《代码2》
CliSck[0]->SendBuf(Buf,32);
CliSck[1]->SendBuf(Buf,32);
CliSck[2]->SendBuf(Buf,32);
CliSck[3]->SendBuf(Buf,32);
问题:
执行第1段没有出现过错误,Buf里的信息被成功的发送到每个客户端。
但执行第2段常出现各种错误,有时正常,有时Buf里的信息只被发送到一个客户端,其它三个客户端什么也没收到。
后来我把第2段代码改为如下:
《代码3》
CliSck[0]->SendBuf(Buf,32); Sleep(100);
CliSck[1]->SendBuf(Buf,32); Sleep(100);
CliSck[2]->SendBuf(Buf,32); Sleep(100);
CliSck[3]->SendBuf(Buf,32);
这样一改后结果正常了,但这是为什么?
望高手指教!