【问题标题】:Java TCP ServerJava TCP 服务器
【发布时间】:2011-03-18 18:28:06
【问题描述】:

我正在构建一个需要运行 TCP 服务器的 GUI 应用程序。 GUI 内置在 Swing 中。我遇到的麻烦是运行服务器。我想要一个人们可以安装的桌面应用程序,它会反过来为我启动服务器。服务器在运行时阻塞,即:

while (true) {
     Socket client = serverSocket.accept();
     System.out.println("S: Receiving...");

....

我试图调用服务器类,但它阻止了 GUI。您认为将服务器与 GUI 分开的最佳方式是什么,同时又可以轻松地将两者打包在一起?感谢您的帮助!

【问题讨论】:

    标签: java


    【解决方案1】:

    最简单的事情是在单独的线程中构建您的服务器。

    【讨论】:

      【解决方案2】:

      Java 中的套接字编程有两种基本方法:

      1. 每个 Socket 使用一个线程
      2. 在一个或少量线程中使用非阻塞 IO

      您可能想要第一个。如果你不知道你想要哪个,那么你几乎肯定想要第一个。这是主观的,但我认为大多数人会同意 #1 更容易正确。

      这里是an answer that discusses the difference

      假设您决定使用线程,use a thread pool!它既简单又整洁。

      我认为你已经过了这个阶段,但是如果你想要一些基本的“101”类型的材料,Sockets and Threads 上的旧 Sun 教程虽然尘土飞扬,但很有用。

      【讨论】:

        【解决方案3】:

        Threads.

        请注意,一旦引入多线程编程,就会有很多陷阱。一个重要的问题是必须在 Swing 事件线程中访问任何 Swing 或 GUI 元素。您可以使用SwingWorkers 来简化这项任务。

        您也可以使用Java NIO

        【讨论】:

          【解决方案4】:

          嗯,根据您的描述,问题可能是您需要将 GUI 和服务器部分(带有 while(true) )放入单独的线程中,以便您可以处理用户生成的事件。

          【讨论】:

            【解决方案5】:

            最简单的解决方案通常是在不同的线程中运行您的 ServerSocket。你也可以尝试异步 IO 之类的东西,但这真的很痛苦。

            【讨论】:

              猜你喜欢
              • 2012-11-12
              • 2012-11-03
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-21
              • 2019-02-26
              • 2019-02-26
              相关资源
              最近更新 更多