【问题标题】:accept() , close() methods On ServerSocket服务器套接字上的 accept() 、 close() 方法
【发布时间】:2012-02-25 22:18:47
【问题描述】:

我创建了一个聊天程序。我的服务器有一个按钮,该按钮用于启动服务器套接字上的服务器调用 accept() 方法,用于关闭服务器套接字上的服务器调用 close() 的按钮。

当我重新按下开始按钮以重新接受同一个套接字上的连接时,accept 方法抛出 SocketException 套接字已关闭。

【问题讨论】:

  • 我们有什么可以帮助您的吗?我不知道。请阅读常见问题解答。也请接受您其他问题的答案
  • docs.oracle.com/javase/1.4.2/docs/api/java/net/…。您需要创建新的 ServerSocket 实例,然后在其上调用 accept 方法。

标签: java sockets


【解决方案1】:

您无法重新打开套接字。如果您想再次使用该变量,则必须创建并分配一个新的套接字。

Socket 上的 Java 文档中,查看有关“关闭”方法的信息:

一旦套接字被关闭,它就不能用于进一步的网络使用(即不能重新连接或重新连接)。需要创建一个新的套接字。

关闭这个socket也会关闭这个socket的InputStream和OutputStream。

【讨论】:

    【解决方案2】:

    如果您之前的套接字已成功关闭,那么重新实例化该套接字应该不会有问题。这在 Java 中可以工作,因为 JVM 会为你释放垃圾。

    如果您想要与服务器建立多个连接(这可能很有用,因为您正在聊天),请记住这一点。 服务器端的 accept 函数将在每次请求时创建一个新的套接字。因此,您可以只使用线程并将新套接字(使用接受创建的套接字)传递给线程。

    如果这不能回答您的问题,我建议您访问 Oracle 网站:http://docs.oracle.com/javase/tutorial/

    并重新提出问题。

    【讨论】:

    • 如何从服务器上的关闭按钮关闭由 accpet 方法创建的所有套接字。当我在服务器上连接多个客户端并从关闭按钮调用 socket.close 时,它​​只关闭一个客户端而不是全部。看起来关闭一个套接字实例。
    • "如果在服务器启动或运行时检测到任何类型的错误,它将立即关闭所有套接字,并自行终止。如果客户端或服务器中的任何一个关闭了与另一个的连接,代理服务器也将关闭所有套接字并终止自己。它知道客户端或服务器是否因为发送了-1而断开连接。代理服务器侦听,等待发送,当遇到它时,所有套接字都被发送关闭。”这可能会有所帮助:dwgold.com/Projects/Networking/Proxyserver/Default.aspx
    • 当我从服务器抛出套接字异常以关闭所有套接字时,没有-1发送给客户端。
    • 没有“重新实例化该套接字”之类的东西。
    猜你喜欢
    • 2016-08-13
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多