当前位置: 首页 > 面试题库 >

如何处理Java中的套接字断开连接?

卞安邦
2023-03-14
问题内容

大家好。我有一个使用ServerSocket和Socket类用Java编写的服务器。

我希望能够检测并处理断开连接,然后在必要时重新连接新客户端。

检测客户端断开连接,关闭套接字然后接受新客户端的正确步骤是什么?


问题答案:

大概是在从套接字读取数据,也许是在输入流上使用包装器,例如BufferedReader。在这种情况下,当相应的读取操作返回-1(对于原始read()调用)或为null(对于readLine()调用)时,您可以检测到流的结尾。

在封闭的套接字上执行某些操作会导致SocketException,您还需要适当地对其进行处理。



 类似资料:
  • 问题内容: 检测插座是否已掉落的最合适方法是什么?还是实际上是否发送过数据包? 我有一个库,用于通过Apple网关(在GitHub上提供)将Apple Push Notifications发送到iPhone 。客户端需要打开一个套接字并发送每个消息的二进制表示形式。但不幸的是,Apple不会返回任何确认。该连接也可以重用于发送多个消息。我正在使用简单的Java套接字连接。相关代码为: 在某些情况下

  • 问题内容: StackExchange.Redis的“ 基本用法”文档解释说,该方法是长期存在的,有望重新使用。 但是,当与服务器的连接断开时该怎么办?是否自动重新连接,或者是否有必要像此答案一样编写代码(引用该答案): 上面的代码是处理断开连接恢复的好方法,还是实际上会导致多个实例?同样,该属性应如何解释? [另外:我相信上面的代码是惰性初始化的一种非常糟糕的形式,尤其是在多线程环境中-请参阅

  • 我一直在思考为什么JDBC只是阻塞操作,为什么我不能为假设的事件处理程序onResultSetArrived(ResultSet rs)设置一些侦听器。为什么我必须为每个JDBC查询阻塞一个线程。 过了一段时间,我深入研究了Java套接字(我想JDBC是构建在它们之上的),并意识到也没有任何事件处理。提供非阻塞读取的唯一选项是通过available()方法,但这非常低效,因为必须在循环中定期检查它

  • 我想检查一下我的客户是否断开了连接。根据我的研究,一种可能的方式是我可以继续给客户写信。如果客户端未能接收到消息,则表示已断开连接。我向相应的客户端发送消息“Checking Connection:Client”clientNo。 我将clientNo 1连接到服务器,它接收 客户1 但是当我将另一个客户端连接到服务器时,我的clientNo1停止接收来自服务器的消息,我的clientNo2现在将

  • 我正在开发一个与许多客户端连接的服务器。我需要知道客户端何时与服务器断开连接。因此,每个客户端都向服务器发送一个特定的字符。如果两秒钟后没有收到字符,那么我应该断开服务器与客户端的连接(释放为此客户端分配的资源)。 这是我的服务器的主要代码: 第一个问题是,我用来识别在线客户端的方式(每秒发送特定消息)是否是一种好方法? 如果它是好的,我如何使用检测与女巫客户端相关,然后如何断开密钥与服务器的连接

  • 问题内容: 我遇到了Java套接字API的一些问题。我正在尝试显示当前连接到我的游戏的玩家数量。很容易确定播放器何时连接。但是,似乎似乎很难确定玩家何时使用套接字API断开连接。 呼叫已断开远程似乎总是返回一个插座上。同样,调用已远程关闭的套接字似乎总是会返回。我读过要真正确定套接字是否已关闭,必须将数据写入输出流,并且必须捕获异常。这似乎是处理这种情况的一种非常不干净的方法。我们只需要不断地通过