【发布时间】:2013-02-27 08:18:00
【问题描述】:
如何用Java实现多线程服务器?服务器侦听端口(例如 5000)并在单独的线程中提供连接并继续侦听更多客户端。
【问题讨论】:
标签: java multithreading sockets networking client-server
如何用Java实现多线程服务器?服务器侦听端口(例如 5000)并在单独的线程中提供连接并继续侦听更多客户端。
【问题讨论】:
标签: java multithreading sockets networking client-server
这是一个典型的例子:
ServerSocket ss = new ServerSocket(port);
ExecutorService executor = Executors.newCachedThreadPool();
while(true)
{
Socket s = ss.accept();
Runnable r = new TaskImplementsRunnable(s);
executor.submit(r)
}
public class TaskImplementsRunnable implements Runnable
{
private Socket socket;
public TaskImplementsRunnable(Socket socket)
{
this.socket = socket;
}
@Override
public void run()
{
try
{
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String command;
while((command = reader.readLine()) != null)
{
if(command.equalsIgnoreCase("command 1"))
{
writer.println("This is command 1!");
}
else if(command.equalsIgnoreCase("command 2"))
{
writer.println("This is command 2!");
}
else if(command.equalsIgnoreCase("exit"))
{
break;
}
else
{
writer.println("This is unknown command!");
}
}
}
catch(IOException e)
{
e.printStackTrace();
}
try
{
writer.close();
reader.close();
}
catch(IOException e){}
}
}
【讨论】: