我是Java Socket Programming的新手,目前正在探索它的Socket API。我创建了一个新的简单应用程序,启动ServerSocket
并侦听客户端,当客户端在套接字上写入内容时,服务器为该客户端分配新线程。我首先尝试使用控制台应用程序,一切正常。现在,我使用SWT(Eclipse 3.7中的WindowBuilder插件)制作了相同的GUI。窗口有一个按钮,可以打开和关闭服务器的监听。下面是SWT Button点击事件中编写的代码,它将开始监听客户端。
if(!isServerRunning)
{
btnServerRunner.setText("Stop Server");
isServerRunning = true;
while (listening)
{
try
{
new ClientHandler(listener.accept()).start();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
else
{
try
{
listener.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
btnServerRunner.setText("Start Server");
isServerRunning = false;
}
ClientHandler
类已扩展Thread
,因此将为每个新客户端启动新线程。我知道上面的代码适用于控制台应用程序,但不适用于GUI,因为我将应用程序扔进了按钮单击时监听客户端套接字的无限循环。启动和停止ServerSocket
监听不冻结应用UI的客户端的优雅方法是什么?
感谢。
答案 0 :(得分:2)
您应该使用单独的线程来接受客户端连接。该按钮可以启动并中断该线程。
答案 1 :(得分:1)
您需要在一个单独的线程中运行您的服务器(来自UI分派线程)。