Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 客户端断开连接后是否可以从客户端套接字读取?_C_Sockets_Ubuntu_Server - Fatal编程技术网

C 客户端断开连接后是否可以从客户端套接字读取?

C 客户端断开连接后是否可以从客户端套接字读取?,c,sockets,ubuntu,server,C,Sockets,Ubuntu,Server,我正在尝试为C编写一个服务器程序,它将能够处理编写糟糕的客户端程序。客户端向服务器发送一组命令,然后关闭套接字。服务器执行每个命令后,根据命令是否失败,它应该向客户端发送0或1 如果我不尝试在每个命令后向客户端发送一个字节,那么一切都很好,在客户端关闭套接字后,我可以继续从服务器端读取命令。但是,如果我确实尝试写入这1个字节,在从客户端读取1个命令后,我将无法再读取更多命令(由对等方重置连接) 有办法解决这个问题吗?与中一样,要能够写入和读取所有命令?在本例中,您需要知道客户端是否在发送另一个命

我正在尝试为C编写一个服务器程序,它将能够处理编写糟糕的客户端程序。客户端向服务器发送一组命令,然后关闭套接字。服务器执行每个命令后,根据命令是否失败,它应该向客户端发送0或1

如果我不尝试在每个命令后向客户端发送一个字节,那么一切都很好,在客户端关闭套接字后,我可以继续从服务器端读取命令。但是,如果我确实尝试写入这1个字节,在从客户端读取1个命令后,我将无法再读取更多命令(由对等方重置连接)


有办法解决这个问题吗?与中一样,要能够写入和读取所有命令?

在本例中,您需要知道客户端是否在发送另一个命令之前等待您对每个命令的答复。 在典型的客户机-服务器连接中,客户机启动通信。由于您的客户端正在发送一系列命令,因此有两种可能:

  • 在操作结束时,您的插座返回将正常或不正常
  • 对于客户端发送给您的每一条消息,您的回报将是OK或NOK

此外,我建议您发送任何跟踪信息,以便我们评估哪种解决方案更适合您的情况。

我不明白您想做什么。客户端从服务器接收响应,然后断开连接。在客户端断开连接后,服务器如何从客户端获取更多命令?我不清楚。客户机向服务器发送x个命令,所需时间少于服务器处理1个命令所需的时间(一次处理1个命令)。如果我不尝试写入客户机,即使在客户机关闭套接字之后,我仍然可以读取x-1剩余的命令。如果我确实向客户端写入,我将无法读取更多命令。是否有方法检查套接字是否正常?如果已连接到对等方,则套接字正常。恐怕我没有完全明白。。套接字是一种应用层连接,如果主机一直在侦听特定端口,那么客户端将能够独立发送。在我尝试写入之前,是否有办法知道客户端是否断开连接?我有一种感觉,我试图写作和失败会引起问题。是的,确实如此。如果要在写入之前检查套接字连接,请尝试(类似linux):>If(socket<0)>return-1;>发送(。。。