C++ 循环 小问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 15:46:58
///////////////////////////////////////
....

listen(mysck,0);
char recvdata[1]="";
int accsck=SOCKET_ERROR;

while (1)
{
while (accsck==SOCKET_ERROR)
{
SOCKET accsck=accept(mysck,NULL,NULL);
mysck=accsck;
while ( recv(mysck,recvdata,32,0))
{
printf("%s\n",recvdata);
if(accsck==SOCKET_ERROR)break;
}
}
}
/*
大老们,我想他在断了连接之后再次监听,该怎么改下呢?
我这第一次连接可以正常使用,但当对方断开之后就 他死的那么printf("%s\n",recvdata)
我试过用break但依然如此。。希望各位大老能帮个小忙 优化修改一下
*/
//////////////////////////////////////////

while (1)
{
while (accsck==SOCKET_ERROR)
{
SOCKET accsck=accept(mysck,NULL,NULL);
mysck=accsck;
while ( recv(mysck,recvdata,32,0))
{
printf("%s\n",recvdata);
if(accsck==SOCKET_ERROR)break;
}
}
}
break跳出第3重循环后accsck必然等于SOCKET_ERROR,于是乎进入第二重循环,关键在于你修改了mysck的值,所以recv接到的都是错误信息,因此不会继续阻塞,自然就会接着printf("%s\n",recvdata);修改如下试一下:
while (1)
{
while (accsck==SOCKET_ERROR)
{
SOCKET accsck=accept(mysck,NULL,NULL);

while ( recv(accsck,recvdata,32,0))
{
printf("%s\n",recvdata);
if(accsck==SOCKET_ERROR)break;
}
}
}
注意recv,send的第一个参数是新的socket,不是mysck。