给出有问题代码!请大虾帮看看!Linux下使用socket传输文件(为客户端),在将服务端网络断开后为什么客户端还在Recv,程序不结束!

ecwaychina 2006-07-06 09:24:58
下面是写文件的部分代码,将传输文件时我将服务端网络断开后(拔掉网线),程序执行到 write_normal_msg(" TCP/IP FullReceiveFile: begin recv file");写完日志后就不往下走啦,还在Recv,这时网络已经断开啦。应该要退出的,服务端时使用VC6.0。调试环境为公司局域网。
while (fileloop == 0)
{

write_normal_msg(" TCP/IP FullReceiveFile: begin recv file");
memset(rcvbuf,0x00,sizeof(rcvbuf));
iBytesRead=recv(sockfd, rcvbuf, FILEPACKAGE, 0); //接收
write_normal_msg(" TCP/IP FullReceiveFile: after recv file");
if (iBytesRead<=0){
return -1;
}
write_normal_msg(" TCP/IP FullReceiveFile: after check recv file");
memset(msgstr,0x00,sizeof(msgstr));
sprintf(msgstr," TCP/IP FullReceiveFile: iBytesRead %d ",iBytesRead);
write_normal_msg(msgstr);
if ((rcvbuf[iBytesRead-6]==0x19) && (rcvbuf[iBytesRead-5]==0x19) && (rcvbuf[iBytesRead-4]==0x20) &&(rcvbuf[iBytesRead-3]==0x20) &&(rcvbuf[iBytesRead-2]==0x20) && rcvbuf[iBytesRead-1]==0x19){
data = (char *)malloc(iBytesRead-4);
memset(data,0x00,iBytesRead-4);
for (i = 0 ;i < iBytesRead-4 ;i++){
data[i] = rcvbuf[i];
}
fwrite(data,iBytesRead-6,1,fp);
//write_normal_msg(" FullReceiveFile : Write File End");
free(data);
break;
}
else
{
fwrite(rcvbuf,iBytesRead,1,fp);
//write_normal_msg(" FullReceiveFile : Write File Data");
}
}
...全文
193 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
swallowma 2007-01-23
  • 打赏
  • 举报
回复
mark
Hellboy 2006-07-06
  • 打赏
  • 举报
回复
拔掉网线
哈哈

tcpip在拔掉网线以后不会得到任何通知,
recv会一直都在那边。

你可以试试把服务程序关了,这样recv会返回 -1

有个办法,给recv()设置一个超时时间,SOL_TIMEOUT


==========广告签名============
http://shop33712512.taobao.com
淘宝店,专卖化妆品、自家蜂产品
==========广告签名============
YanDong_8212 2006-07-06
  • 打赏
  • 举报
回复
好象是阻塞在
iBytesRead=recv(sockfd, rcvbuf, FILEPACKAGE, 0);
你检查下服务器端的端口和连接情况。

23,217

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧