如何让服务器在同一端口上接受多个套接字

时间:2015-03-24 18:26:48

标签: java sockets inputstream outputstream printwriter

我希望ServerSocket接受在同一端口上连接的2个套接字。但是,它不会打印出从BufferedReader读取的内容,并且连接后的套接字仍为空。

这是Serversocket代码:

ServerSocket serverSocket = new ServerSocket(PORT);
try {
Socket con;
int socketCounter= 0;
Socket first, second;
while (socketCounter!= 2) {
        con = serverSocket.accept();
        String input;
        BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
        if ((input = in.readLine()) != null) {
            System.out.println(input);
            if (input.equals("first")) {
                first = con;
            } else if (input.equals("second")) {
                second = con;
            } else {
                continue;
            }
        }
        socketCounter++;
    }
} catch (Exception e) {
    e.printStackTrace();
}

这是"第一个"

try {
    first = new Socket(URL, PORT);
ObjectOutputStream out = new ObjectOutputStream(first.getOutputStream());
ObjectInputStream in = new ObjectInputStream(first.getInputStream());
PrintWriter pw = new PrintWriter(new OutputStreamWriter(first.getOutputStream()));
pw.println("first");
pw.flush();
} catch(Excpetion e){
    e.printStackTrace();
}

第二个基本相同:

try {
    second = new Socket(URL, PORT);
ObjectOutputStream out = new ObjectOutputStream(second.getOutputStream());
ObjectInputStream in = new ObjectInputStream(second.getInputStream());
PrintWriter pw = new PrintWriter(new OutputStreamWriter(second.getOutputStream()));
pw.println("second");
pw.flush();
} catch(Excpetion e){
    e.printStackTrace();
}

我最好想要做这个单线程,但是,如果没有,那很好。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

创建ServerSocket时,必须定义将用于侦听客户端请求的服务器套接字的端口。每次ServerSocket收到请求时,该请求都将重定向到ServerSocket定义的另一个端口。通常,我们实例化一个新线程并将其与客户端工作相关联。 检查此示例: http://www.oracle.com/technetwork/java/socket-140484.html