当前位置: 首页 > 知识库问答 >
问题:

关闭BufferedWriter/Reader会影响绑定到同一套接字的其他实例吗?

孟洋
2023-03-14

我有n个服务器线程,每个线程都听1个客户端。

当一个服务器线程从其html" target="_blank">客户端接收到消息时,它需要通知其他“n-1”客户端,这就是为什么我在服务器线程之间保留一个共享对象(包含一个“n”套接字数组,每个客户端一个)。

此外,在持有ServerSocket的主服务器线程中,每次我接受与客户端的新连接时,我都会打开一个BufferedWriter/Reader,使用从ServerSocket.accept()返回的新套接字向他给出第一个答案。

在回答“OK”的情况下,我打开一个新线程,将新套接字传递给它,以便监听新客户机的以下请求。

问题是,我无法关闭主服务器线程中的BufferedReaderBufferedWriter,因为它也会关闭底层流,导致监听该套接字/流的服务器线程出现问题。

问题是:如果我在新线程中打开另一个BufferedReader(绑定到同一个套接字),然后关闭它,那么在同一个套接字上打开的其他BufferedReader(writer)(特别是在主服务器线程中打开的,我以前无法关闭的那些)会被关闭吗?他们会被抛出异常吗?

可以共享打开的BufferedReader/Writer,而不是套接字,以避免每次新对象出现时都实例化,但这是一个与以上述方式执行操作相关的问题。

如果我不清楚,请告诉我,我的英语不是很好。

共有2个答案

谷梁浩思
2023-03-14

每个与另一个套接字有开放连接的套接字都有一个开放的InputStream和一个开放的OutputStream。关闭这些流中的任何一个也会关闭套接字。关闭套接字或其流不会影响其他套接字,除非它们已连接。您不想关闭任何流,除非您还想关闭使用流的套接字之间的连接。请询问我是否遗漏了什么,或者您是否有其他问题:)

章德惠
2023-03-14

>

  • 关闭任何环绕流的读写器或流将关闭环绕流
  • 关闭套接字的输入流或输出流会关闭另一个流和套接字
  • 关闭套接字将关闭两个流。

    换句话说,关闭其中任何一个都会关闭全部。

    如注释中所述,围绕单个流的多个缓冲流/阅读器/作家无法工作。

    多个线程从同一个套接字读取/写入也不太可能正常工作,除非您非常注意同步和缓冲。

    你需要重新考虑你的设计。

  •  类似资料:
    • 结果: 在步骤6中,如果服务器在几分钟内关闭死连接--CY,则新通道CY2将变为单向--从客户端Y发送的数据不能到达服务器,包括ACK数据包,而反之亦然。 如果服务器在很长的时间(例如2小时)内关闭了已死的连接--CY,则不会出现任何问题。 这个问题只在运行NAT时才会发生,至少我们在同一个LAN中运行应用程序时不会重现这个问题(不需要穿越NAT)。 更多信息: 1)第一台计算机上的连接A:192

    • 问题内容: 我有一个使用简单套接字在两个系统之间传递某些字符的应用程序。我的Java应用程序作为服务器运行。我建立了良好的连接,甚至传递了一条消息。但是,发送完一条消息后,我的连接关闭。 从我可以看出来的好像是在关闭时,套接字本身正在关闭吗?!这很不好,因为我有多个要在同一连接上发送的消息。 我吃饱了吗?如何在Java中维护此连接? 问题答案: 是的,关闭任何作家/读者将关闭他们包装的所有其他作家

    • 我关闭了服务器端的writer,因为它永远不会发送任何消息,而是只从客户端读取消息。它不会抛出任何异常,而是停留在我调用的任何与套接字相关的方法的位置,如reader.readline()和socket.setsotimeout()。 这个问题很容易解决,因为我只是不关闭作家。但是,我很好奇为什么套接字无法通信。

    • 我不熟悉Java Nimbus的外观和感觉。我正在尝试使用Nimbus的功能,使用定制单个组件实例:https://docs.oracle.com/javase/8/docs/api/javax/swing/plaf/nimbus/package-summary.html 我遇到了以下问题(bug?): 不幸的是,“Nimbus.Overrides”值显然不仅会影响它被明确设置的组件对象,还会影响

    • 我有一个包含三个模块的工作簿,总共大约19000行代码。 我添加了多个按钮来运行性能完美的子程序。 我添加了四个新的子程序(都很短,总共可能有200行)来复制/粘贴数据并构建一个图形。 当我添加这些子例程时,所有其他子例程都开始异常缓慢地运行(从5-10秒到几分钟,有些子例程完全冻结)。 我有一个解决方法的想法(每次运行例程时关闭和打开自动计算),但我试图理解为什么这是一个问题。 Excel在待机

    • 比如说,一个 mysql sevrer 有 100 个连接 这一百个连接什么 level 都有 假如现在执行一个 level 为 SERIALIZABLE 的 crud sql 什么,此时 mysql server 会停掉其他 99 个连接的 sql 来实现 SERIALIZABLE 吗? 这个问题的意思就是,SERIALIZABLE level 只会让其他 SERIALIZABLE level,