为什么我的服务器没有等待接收来自客户端的回复
Why is my server not waiting to receive reply from client?
我正在制作一个小程序,它在同一台机器上有一个服务器和客户端通信,确实如此。但是我无法让服务器等待从客户端接收消息。为什么循环不像第一次那样在int iRecvA = recv(acceptSocket, machId, STRLEN, 0);
线上等待?我进入最后一else
.
while (!done)
{
int iRecvA = recv(acceptSocket, machId, STRLEN, 0);
int iRecvB = recv(acceptSocket, serialNum, STRLEN, 0);
if (iRecvA && iRecvB > 0)
{
//stuff
}
else if (iRecvA && iRecvB == 0)
{
cout << "Connection closedn";
cleanup(acceptSocket);
return 0;
}
else
{
cerr << "ERROR: Failed to receive messagen";
cleanup(acceptSocket);
return 1;
}
strcpy_s(sendMessage, "Activation was successful!nnn");
int iSend = send(acceptSocket, sendMessage, strlen(sendMessage), 0);
if (iSend == SOCKET_ERROR)
{
cerr << "ERROR: Failed to send messagen";
cleanup(acceptSocket);
return 1;
}
}
您在其中一个套接字上遇到了流结束,但您的代码没有正确检查它。代码未正确检查任何返回值。你似乎认为
iRecvA && iRecvB > 0
如果它们都是积极的,则为真,并且
iRecvA && iRecvB == 0
如果它们都为零,则为 true。他们不是。您需要单独检查它们,并打印实际错误。在尝试第二recv(),
之前,您应该真正检查第一个recv()
的结果,但要使用现有的代码结构:
if (iRecvA < 0 || iRecvB < 0)
{
cerr << "ERROR: " << strerr[errno] << "Failed to receive messagen";
close(iRecvA);
close(iRecvB);
cleanup(acceptSocket);
return 1;
}
// else
if (iRecvA == 0 || iRecvB == 0)
{
cout << "Connection closedn";
close(iRecvA);
close(iRecvB);
cleanup(acceptSocket);
return 0;
}
// else
{
// stuff
}
另请注意,return
之后的else
是多余的。
相关文章:
- "unknown ca"自生成的 CA、证书和客户端/服务器
- 如何将函数集合传递给客户端类,以便将它们当作客户端类本身的成员使用
- 使用调试/崩溃报告将应用程序部署到客户端
- 如何在本地机器上运行c++和javascript客户端代码(hackerbank风格)
- 如何通过套接字将文本文件的内容从服务器发送到客户端
- 从服务器传输到客户端的消息不会出现
- OpenSSL TLS服务器-使用客户端证书白名单
- 当服务中的事件被触发时,如何将响应从服务发送回客户端?
- 我可以与 python 服务器而不是 c++ 客户端建立 tcp/ip 套接字吗?
- 提升 Asio TCP 服务器 处理多个客户端
- boost::asio UDP 广播客户端仅接收"fast"数据包
- 如何绑定 C++ gRPC 客户端的网络接口
- C++套接字客户端到 Python 服务器未创建连接
- 用于解析 win64 堆栈跟踪的命令行客户端(可以访问符号服务器)
- 将相机数据从服务器实时流式传输到客户端
- 如何将 Firebase 与基于 Linux 的客户端应用配合使用,以便与服务器进行双向消息通信
- 为什么我的服务器没有等待接收来自客户端的回复
- 使用 select() 的请求/回复服务器。无法写回客户端
- ZMQ等待消息,让客户端等待回复
- IRC客户端- JOIN没有回复