请教关于如何实现socket中一次发送大量数据得问题
我用了下面的方法发送数据
long nBytes=50000,nLeft,idx,r;
nLeft=nBytes;
idx=0;
while(nLeft>0)
{
r=this->cbi_send(this->iCSockfd,&pcSndBuf[idx],nLeft,iFlag);
sleep(0.5);
if(r==-1)
{
return -1;
}
nLeft-=r;
idx+=r;
}
发送端是solaris,接收端是windows2000
接收函数为VC编写:
long iRcv,nLeft,idx;
nLeft=50000;
idx=0;
while(nLeft>0)
{
iRcv = this->Receive(&recvbuff[idx],nLeft);
idx+=iRcv;
nLeft-=iRcv;
}
我这样做,主要是为了保证数据可以完整的传输,因为我发现如果不加循环,数据量大了以后会出现无法一次接收完整数据的问题。
但是最近好像网管做了什么限制,使得我的程序总是会停在Receive()里面,半天才能接收几K的数据,我又测试了一下,发现如果每次发送得数据(不加循环发送)是几百字节得话,就没有问题;
请教一下各为高人,有没有什么其他方法能够让我在循环中每次发几百字节,一点一点将数据发送出去,上面我用得这个方法,在接收数据时总是停在Receive里,好像不行;求教其他方法或是大家有没有碰到过这种问题,如何解决
另外还想问一下,一次发送数据量大得时候,发不出去,或是半天收不到,可能与网络方面得什么设置有关吗?