【问题标题】:Is reading from client socket possible after client disconnects?客户端断开连接后是否可以从客户端套接字读取?
【发布时间】:2015-06-17 15:11:45
【问题描述】:

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

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

有没有办法解决这个问题?比如,能够读写所有的命令?

【问题讨论】:

  • 我不明白你在做什么。客户端收到服务器的响应,然后断开连接。客户端断开连接后,服务器应该如何从客户端获取更多命令?
  • 我不清楚。客户端向服务器发送 x 个命令,所用时间少于服务器处理 1 个命令所用的时间(命令一次处理 1 个)。如果我不尝试写入客户端,即使在客户端关闭套接字后,我仍然可以读取 x-1 剩余命令。如果我确实写信给客户端,我将无法再读取任何命令。

标签: c sockets ubuntu server


【解决方案1】:

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

  • 在操作结束时,您的套接字返回将是 OK 或 NOK。
  • 对于客户发送的每条消息,您的退货将是 OK 或 NOK。

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

【讨论】:

  • 有没有办法检查socket是OK还是NOK?
  • 如果你已经连接到你的对端,那么套接字就可以了。恐怕我没明白。。socket是一个应用层连接,如果主机一直监听特定端口,那么客户端将能够无限发送
  • 有没有办法在我尝试写之前知道客户端是否断开连接?我有一种感觉,我尝试写作并且失败会导致问题。
  • 是的。如果要在写入前检查套接字连接,请尝试(类似 linux): > if ( Socket return -1; > 发送(...
猜你喜欢
  • 2010-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-01
相关资源
最近更新 更多