为什么循环send到某一次时会出错????//sockfd=socket(AF_INET,SOCK_STREAM,0)
//new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)long filelen=mFile.GetLength();
long lCount=filelen/sizeof(buffer);//char buffer[1024];
int iRemaining=filelen%sizeof(buffer);mFile.SeekToBegin();
ZeroMemory(buffer,sizeof(buffer));
for(long i=0;i<lCount;i++)
{
mFile.Read(buffer,sizeof(buffer));
if(send(new_fd,buffer,sizeof(buffer),0)==-1)
{
errorcode;//循环到某次时send出错
}}
mFile.Read(buffer,iRemaining);
if(send(new_fd,buffer,iRemaining,0)==-1)
{
errorcode;
}
//new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size)long filelen=mFile.GetLength();
long lCount=filelen/sizeof(buffer);//char buffer[1024];
int iRemaining=filelen%sizeof(buffer);mFile.SeekToBegin();
ZeroMemory(buffer,sizeof(buffer));
for(long i=0;i<lCount;i++)
{
mFile.Read(buffer,sizeof(buffer));
if(send(new_fd,buffer,sizeof(buffer),0)==-1)
{
errorcode;//循环到某次时send出错
}}
mFile.Read(buffer,iRemaining);
if(send(new_fd,buffer,iRemaining,0)==-1)
{
errorcode;
}
虽然我还不是很明白Sleep()的真正用途,但是看到很多例程都这么写;是否担心接收方或者gateway应付不了汹涌而来的报文风暴,丢包?
while(Left>0)
{ SentCount = send(FSocket,(BYTE*)SendBuf+PackLen-Left,Left, 0);
//Memo->Lines->Add("SendPack: "+IntToStr(SentCount));
if( SentCount == SOCKET_ERROR)
{ ErrorCode = WSAGetLastError();
if(ErrorCode != WSAEWOULDBLOCK && ErrorCode !=WSAEMSGSIZE && ErrorCode!=0)
goto FAILED;
if(time(NULL) > LastSentTime+20) //20秒没发出数据
goto FAILED;
else
Sleep(20);
}
else
{ Left-=SentCount;
LastSentTime=time(NULL);
}
}
return(true);
FAILED:
ShowMsgAutoClose("发送数据失败:"+SysErrorMessage(ErrorCode));
return(false);