2010-07-21 127 views
2

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

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

....

我试着拨打服务器类,但随后块的GUI。您认为将服务器与GUI分开的最佳方式是什么?同时轻松地将两者打包在一起?谢谢你的帮助!

回答

1

最简单的解决方案通常是在不同的线程中运行您的ServerSocket。你也可以尝试像异步IO这样的事情,但这是一个真正的痛苦。

0

那么,从你的描述来看,问题可能是你需要将GUI和服务器部分(与while(true))放在不同的线程中,以便处理用户生成的事件。

2

Threads.

注意,一旦你介绍的多线程编程,里面有很多陷阱的。一个重要的问题是,必须在Swing事件线程中完成对任何Swing或GUI元素的访问。您可以使用SwingWorkers使该任务更容易。您可以使用Java NIO

5

有到插座Java编程两种基本方法:

每个插槽
  1. 使用一个线程
  2. 使用非阻塞在一个或少数几个线程的IO

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

这是an answer that discusses the difference

假设您决定使用线程,use a thread pool!它很容易和整齐。

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

0

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