【发布时间】:2015-05-28 05:00:14
【问题描述】:
我希望 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();
}
我更愿意做这个单线程,但是,如果没有,那也没关系。有人可以帮忙吗?
【问题讨论】:
-
您希望它单线程的任何特殊原因?这会让你的生活变得更加困难
-
没有理由。只是为了让它更容易一点,然而,它可能会让事情变得更难。
-
此代码已经在一个端口上接受多个连接。它是单线程的事实是问题:第二个客户端只能在第一个客户端完成时进行通信。您需要在不同的线程中处理每个接受的连接。
标签: java sockets inputstream outputstream printwriter