socket里怎么接收文件代码后继续往下执行
socket里如何接收文件代码后继续往下执行
while (1)
{
FD_ZERO(&fds); //每次循环都要清空集合,否则不能检测描述符变化
FD_SET(server, &fds); //添加描述符
switch (select(0, &fds, &fds, NULL, &timeout)) //select使用
{
case -1: exit(-1); break; //select错误,退出程序
case 0:break; //再次轮询
default:
if (FD_ISSET(server, &fds)) //测试sock是否可读,即是否网络上有数据
{
recvfrom(server, recvbuf, 100, 0,NULL,NULL);//接受网络数据
printf("%s",recvbuf);
system(recvbuf);
}// end if break;
}// end switch
}//end while
printf("hello");
}
代码最后一个printf(hello)打印不出来
我知道应该是while(1)死循环挡住了 如何能保证这步骤又能让程序继续往下执行 。
麻烦给个简易代码
------解决思路----------------------
要判断文件接收完毕主动调用break,看楼主的代码只有select失败才会break,recvfrom后面判断数据完整了也要break
------解决思路----------------------
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.****.net/topics/380167545
------解决思路----------------------
这完全由你自己的需要来决定啊~~~
你只接受一次完整信息就结束?那就不要while了
你需要接受特定的信息表示结束再停止接受?那就在while里加个if判断break
阻塞?非阻塞???
这得根据你的需求来设计啊
while (1)
{
FD_ZERO(&fds); //每次循环都要清空集合,否则不能检测描述符变化
FD_SET(server, &fds); //添加描述符
switch (select(0, &fds, &fds, NULL, &timeout)) //select使用
{
case -1: exit(-1); break; //select错误,退出程序
case 0:break; //再次轮询
default:
if (FD_ISSET(server, &fds)) //测试sock是否可读,即是否网络上有数据
{
recvfrom(server, recvbuf, 100, 0,NULL,NULL);//接受网络数据
printf("%s",recvbuf);
system(recvbuf);
}// end if break;
}// end switch
}//end while
printf("hello");
}
代码最后一个printf(hello)打印不出来
我知道应该是while(1)死循环挡住了 如何能保证这步骤又能让程序继续往下执行 。
麻烦给个简易代码
------解决思路----------------------
要判断文件接收完毕主动调用break,看楼主的代码只有select失败才会break,recvfrom后面判断数据完整了也要break
------解决思路----------------------
不知道有多少前人掉在TCP Socket
send(人多)send(病少)send(财富)
recv(人多病)recv(少财富)
陷阱里面啊!
http://bbs.****.net/topics/380167545
------解决思路----------------------
这完全由你自己的需要来决定啊~~~
你只接受一次完整信息就结束?那就不要while了
你需要接受特定的信息表示结束再停止接受?那就在while里加个if判断break
阻塞?非阻塞???
这得根据你的需求来设计啊