为什么循环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;
}
解决方案 »
- 对话框背景修改
- vc 2008 ActiveX 添加自定义消息
- 莫名其妙 Device 被改变,程序运行出错,错在哪?谢谢
- 在对话框上添加了一个edit控件,将其剪帖掉,又加入一个下拉列表框,运行时程序提示“试图执行系统不支持的操作”,请问这是咋回事
- 请问如何生成8位灰度图的bmp头信息
- 如何关闭线程函数?
- ★★★请大家介绍几本学习SQL server 的书好吗?我从来没有接触过,现在想学一下了~
- 关于派生CProgressCtrl的问题
- 一个关于Edit的问题?
- 关于VS2005调用MSDN的问题!
- 有谁做过多文档的工程,给我个例子看看!
- 请高手指点:如何编写消除弹出式广告窗口的程序???!!!
虽然我还不是很明白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);