SocketException:套接字已关闭

2024-04-06

我正在使用 Java Sockets 创建一个聊天应用程序,并且得到了SocketException: socket closed关闭服务器时。我收到错误即使我从未尝试连接客户端- 只是停止服务器将会出现此套接字关闭异常。

我知道错误意味着什么,我试图在套接字关闭后访问它,但我不明白为什么会发生这种情况。

public ServerSocket server_socket;
new ConnectionThread(server_back_end);

class ConnectionThread extends Thread implements Runnable, Serializable
{
    public ServerBackEnd server_back_end;

    public ConnectionThread(ServerBackEnd server_back_end) /*constructor*/
    {
        this.server_back_end = server_back_end;
        start();
    }

    @Override
    public void run()
    {
        try
        {
            server_back_end.server_socket = new ServerSocket(8080);
            server_back_end.server_front_end.display("<<SERVER STARTED>>");

            while (server_back_end.running)
                add_incoming_clients();
        }
        catch (Exception e)
        {
            e.printStackTrace(); //this gets thrown when I stop server
        }
    }//end run()

我认为问题出在 add_incoming_clients() 中,因为当我注释掉该调用时,它不会抛出错误。尽管我没有与任何客户打交道,但在现场还是发生了一些事情accept() method:

    public void add_incoming_clients() throws IOException, ClassNotFoundException
    {
        Socket client_socket = server_back_end.server_socket.accept(); //line 172

        ClientInfo new_client = new ClientInfo(
                new ObjectOutputStream(client_socket.getOutputStream()),
                new ObjectInputStream(client_socket.getInputStream()));
     //...
     //...
    }

这是我停止服务器时的代码::

 public void stop()
    {
        if (running)
            try
            {
                running = false;
                server_socket.close();
                server_front_end.display("<<SERVER TERMINATED>>");
            }
            catch (IOException e)
            {
                System.out.println("stop server exception, is not the problem");
            }
    }//end stop()

有人可以解释我必须做什么才能正确关闭它而没有例外吗? 这是错误(第 172 行似乎是罪魁祸首,但我不明白为什么)

java.net.SocketException: socket closed
    at java.net.DualStackPlainSocketImpl.accept0(Native Method)
    at java.net.DualStackPlainSocketImpl.socketAccept(DualStackPlainSocketImpl.java:131)
    at java.net.AbstractPlainSocketImpl.accept(AbstractPlainSocketImpl.java:409)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:199)
    at java.net.ServerSocket.implAccept(ServerSocket.java:545)
    at java.net.ServerSocket.accept(ServerSocket.java:513)
    at ConnectionThread.add_incoming_clients(ServerBackEnd.java:172)
    at ConnectionThread.run(ServerBackEnd.java:159)

这个例外是你的朋友。它释放正在等待 ServerSocket.accept() 的线程,正确的处理将让您在完全关闭之前清理所有需要清理的内容...您需要像对待朋友一样对待它:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SocketException:套接字已关闭 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • INSERT..RETURNING 在 JOOQ 中不起作用

    我有一个 MariaDB 数据库 我正在尝试在表中插入一行users 它有一个生成的id我想在插入后得到它 我见过this http www jooq org doc 3 8 manual sql building sql statemen
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 如何为俚语和表情符号构建正则表达式 (regex)

    我需要构建一个正则表达式来匹配俚语 即 lol lmao imo 等 和表情符号 即 P 等 我按照以下示例进行操作http www coderanch com t 497238 java java Regular Expression D
  • 从 127.0.0.1 到 2130706433,然后再返回

    使用标准 Java 库 从 IPV4 地址的点分字符串表示形式获取的最快方法是什么 127 0 0 1 到等效的整数表示 2130706433 相应地 反转所述操作的最快方法是什么 从整数开始2130706433到字符串表示形式 127 0
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • getResourceAsStream() 可以找到 jar 文件之外的文件吗?

    我正在开发一个应用程序 该应用程序使用一个加载配置文件的库 InputStream in getClass getResourceAsStream resource 然后我的应用程序打包在一个 jar文件 如果resource是在里面 ja
  • 如何在控制器、服务和存储库模式中使用 DTO

    我正在遵循控制器 服务和存储库模式 我只是想知道 DTO 在哪里出现 控制器应该只接收 DTO 吗 我的理解是您不希望外界了解底层域模型 从领域模型到 DTO 的转换应该发生在控制器层还是服务层 在今天使用 Spring MVC 和交互式
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch

随机推荐

  • 如何在 Jenkinsfile 中设置 github pull request 构建?

    所以 我已经使用 Jenkins 有一段时间了 我已经使用 Github Pull Request Builder 插件设置了许多项目 以便在有人打开拉取请求时运行测试 然后在拉取请求实际合并到 master 时触发一些其他作业 构建 推送
  • Atomikos 事务日志 com.atomikos.icatch.enable_logging=false

    我想了解如果我设置分布式事务功能是否适用于我的应用程序com atomikos icatch enable logging false 我是否正确理解事务恢复与发生崩溃的情况相关 并且我们希望完全重新启动同一事务 恢复是否在同一个分布式事务
  • 直接执行自定义SQL时django-mssql中查询超时过期

    我正在查询一个视图 该视图将返回大量数据 并且需要 1 分钟以上才能完成 我正在使用 django db connection cursor 执行查询 因为这不是我的默认数据库 30 秒后 我收到异常 查询超时已过期 我认为 30 秒是 d
  • ARC 中的系统对象委托是否需要设置为 nil?

    应用程序有时会因错误而崩溃objc object release 苹果开发者技术支持提到了这一点 请记住 您应该始终执行类似 tableView delegate 的操作 零 在你的 dealloc 方法中 即使你使用的是 ARC 出于兼容
  • 使用 Http/2 从 javascript 进行 api 调用

    我知道大多数浏览器支持 http 2 来加载页面 但这是否意味着我在使用 XmlHttpRequest 进行 api 调用时可以利用它 更具体地说 我的问题是 如果我使用 XmlHttpRequest 进行 2 次调用来获取数据 是否可以确
  • Flutter 中 GridView.count 与 GridView.builder 的区别

    有什么区别gridview builder and gridview count在颤振中 和其他任何人一样 builder GridView builder https api flutter dev flutter widgets Gri
  • React Select:传入自定义渲染使用的额外数据

    我正在使用反应选择 目前我正在从elasticsearch中获取数据并将其设置为 var new titles body hits hits forEach function obj looping through elasticsearc
  • Silverlight 4.0 的最佳 Jpeg 编码器

    我想将 Writablebitmap 转换为 Jpeg 流 看起来没有平台支持 而且我在网上看到了一堆开源编码器库 我想听听您的意见 就性能和性能而言 推荐哪个可靠性 我取得了很好的经验FJCore http code google com
  • 汇集估算数据集的 glmers

    问题 我有一个数据集 其中缺少一些预测变量值 我想要池glmer已应用于这些插补集的模型一起 我正在使用mice包来创建插补 我也使用过amelia and mi也没有成功 我想主要提取固定效应 使用pool mouse 包中的函数返回错误
  • 如何在本机反应中显示隐藏的导航栏

    我在本机反应中使用 NavigatorIOS 时遇到麻烦
  • 如何使用带有响应式 UI 的 Xamarin Android 将数据绑定到自定义 ListView

    我正在使用带有响应式 UI 的 Xamarin Android 而不是使用 Xamarin Forms 我有一个自定义 ListView 我已将其布局定义为 xaml 我不知道如何将此控件绑定到 ViewModel 中的 observabl
  • 哪些平台不在 type_info op== 中使用字符串比较?

    这是一个典型的实现type info operator if PLATFORM SUPPORTS UNIQUE TYPEINFO bool operator const type info rhs const return mangled
  • 在应用程序购买中验证

    我正在构建一个 iPhone 应用程序 该应用程序应该通过应用程序内购买处理订阅 当我在应用程序中从 Apple 收到收据时 我想将收据保存在我自己的服务器上 并且在我的服务器上我还想通过 Apple 服务器验证收据 与我的服务器建立连接非
  • 将整数变量传递给任务而不丢失整数类型

    我有一个我不拥有的任务 实际上是一个角色 但在这里使用任务是为了使示例更容易 它对变量进行一些操作 它假设变量是整数 我需要以某种方式向它传递一个变量并将其作为 int 传递 但我没有任何运气 这是我不拥有的任务的超级简化版本 frob y
  • 信息堆大小

    我可以从以下网站获得哪些信息performance memoryChrome 中的对象 这些数字意味着什么 它们是kb还是字符 我可以从这些数字中了解到什么 示例值performance memory MemoryInfo jsHeapSi
  • 为什么这个正则表达式在 Java 中不能按预期工作?

    简单的正则表达式问题 答案很可能是 Java 特定的 This is a comment in a file matches 这会返回 false 据我所知 意味着它总是意味着什么 没有什么特殊意义 所以我就翻译一下 作为 字符串开头的 哪
  • 如何在 Linux 上用 C++ 播放或录制音频(以 .WAV 格式)?

    你好 我一直在寻找一种方法play and recordLinux 最好是 Ubuntu 系统上的音频 我目前正在开发一个前端语音识别工具包 https www launchpad net cmusphinx train这将自动执行调整语音
  • ASP.NET MVC 4 / Web API - 为接受插入 Razor 渲染器:text/html

    我正在使用 ASP NET MVC 4 Web API 创建 RESTful Web 服务 对于 API 访问 我返回 JSON 但一旦一切正常工作 内容协商应该默认适用于 XML 和 JSON 由于我正在致力于实现真正的 RESTful
  • Apache Hadoop Yarn - 核心利用率不足

    无论我如何修改设置yarn site xml即使用以下所有选项 yarn scheduler minimum allocation vcores yarn nodemanager resource memory mb yarn nodema
  • SocketException:套接字已关闭

    我正在使用 Java Sockets 创建一个聊天应用程序 并且得到了SocketException socket closed关闭服务器时 我收到错误即使我从未尝试连接客户端 只是停止服务器将会出现此套接字关闭异常 我知道错误意味着什么