如何创建一个侦听端口并接受多个客户端的Java服务器

时间:2015-05-29 07:08:48

标签: java multithreading sockets server

我需要开发一个Java服务器来监听我的电脑上的端口。

多个客户端(同一台PC上的 )将访问该端口,服务器应调用我在另一个类中编写的公共方法(对于所有客户端,如文件复制)。

我的输入是从每个客户端到该端口的命令行文件路径。 它应该在每次客户端访问端口时调用一个线程。

1 个答案:

答案 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