为了账号安全,请及时绑定邮箱和手机立即绑定

您好,以下内容反映的是关于c++ recv()问题。高手进!

您好,以下内容反映的是关于c++ recv()问题。高手进!

C++ C
富国沪深 2021-11-04 07:03:03
我是这样弄的。int recv(SOCKET h_handle,char *pc_buff,int i_massagelen)//h_hanle发送方的套接字, i_massagelen是数据长度{int recvlen = 0while(recvlen<i_massagelen){recvlen += recv(h_handle,pc_buff+recvlen,i_massagelen-recvlen,0);}rerurn 0;}这个函数的作用是接收固定长度的数据。但是有个问题出现了,如果发送方在突然关闭了或者网络原因断网了。此函数就会永远死等下去。请教怎么样检测h_handle是否关闭了。或者说怎么样才能在h_handle关闭了此函数能马上跳出while循环?(我表达能力有限)或者有什么函数能检测h_handle是否处于连接状态?
查看完整描述

2 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

是你写的有问题,socket的recv遇到错误返回的SOCKET_ERROR你也加到recvlen中去了,一直加,recvlen < i_messagelen永不成立,死循环。

int recv(SOCKET h_handle,char *pc_buff,
int i_massagelen)//h_hanle发送方的套接字, i_massagelen是数据长度
{
int recvlen = 0;
while(recvlen<i_massagelen)
{
int result = recv(h_handle,pc_buff+recvlen,i_massagelen-recvlen,0);
if (result <= 0) break;
recvlen+=result;
}
return recvlen;
}

查看完整回答
反对 回复 2021-11-07
?
炎炎设计

TA贡献1808条经验 获得超4个赞

因为服务器是一对多客户端;
而对于客户端来说,是1对1服务器;
所以,服务器在等待某个客户端的时候,去执行其他客户端的请求。

查看完整回答
反对 回复 2021-11-07
  • 2 回答
  • 0 关注
  • 260 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信