我需要开发一个Java服务器来监听我的电脑上的端口。
多个客户端(同一台PC上的 )将访问该端口,服务器应调用我在另一个类中编写的公共方法(对于所有客户端,如文件复制)。
我的输入是从每个客户端到该端口的命令行文件路径。 它应该在每次客户端访问端口时调用一个线程。
答案 0 :(得分:3)
您可以使用java.net包中的服务器套接字类创建一个套接字,该套接字将侦听该端口上的传入客户端连接。在接受新连接时,启动一个特定于该客户端的新线程,该线程将处理该客户端,同时服务器可以继续侦听新连接。在新线程的run()
方法中放置您希望服务器调用的公共方法。
public class server {
public static void main (String[] args)
{
ServerSocket sock = new ServerSocket (6666); // Server Socket which will listen for connections
try{
while(true)
{
new clientThread(sock.accept()).start(); // start a new thread for that client whenever a new request comes in
}
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
finally {
sock.close();
}
}
// Client Thread for handling client requests
private static class clientThread extends Thread {
Socket socket ;
BufferedReader in ;
PrintWriter out;
clientThread(Socket socket) throws IOException
{
this.socket = socket ;
}
public void run()
{
try
{
// create streams to read and write data from the socket
in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
out = new PrintWriter(socket.getOutputStream(), true);
// put your server logic code here like reading from and writing to the socket
}
catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
finally {
try {
socket.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
}
}
有关Java套接字API的更多信息,请参阅文档 All About Sockets - Oracle