[英]Multiple Clients - One Server w/ Nested Try not connecting to 2nd client [java]
I'm trying to run two clients on a single server using nested try/catch blocks. 我正在尝试使用嵌套的try / catch块在单个服务器上运行两个客户端。 Upon running the Server class and then the Client, I get output that 'Client 1 is connected' but then it stops and seems to hang like it is waiting for Client 2. Can someone explain as to why they're not both connecting?
在运行Server类然后运行Client时,我得到的输出是“ Client 1已连接”,但随后停止并似乎像在等待Client 2一样挂起。有人能解释一下为什么他们都不同时连接吗?
//SERVER args-> 8 8 3000
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ReversiServer {
public static void main(String[] args) throws IOException {
if (args.length != 3) {
System.err.println("Usage: java ReversiServer #_rows #_cols port");
System.exit(1);
}
int portNumber = Integer.parseInt(args[2]);
System.out.println("ReversiServer listening on port " + portNumber);
try (
ServerSocket serverSocket =
new ServerSocket(portNumber);
Socket clientOneSocket = serverSocket.accept();
BufferedReader clientOneIn = new BufferedReader(
new InputStreamReader(clientOneSocket.getInputStream()));
PrintWriter clientOneOut =
new PrintWriter(clientOneSocket.getOutputStream(), true);
) {
System.out.println("Client 1 is connected");
try (
Socket clientTwoSocket = serverSocket.accept();
BufferedReader clientTwoIn = new BufferedReader(
new InputStreamReader(clientTwoSocket.getInputStream()));
PrintWriter clientTwoOut =
new PrintWriter(clientTwoSocket.getOutputStream(), true);
) {
System.out.println("Client 2 is connected");
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port "
+ portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
} catch (IOException e) {
System.out.println("Exception caught when trying to listen on port "
+ portNumber + " or listening for a connection");
System.out.println(e.getMessage());
}
}
}
//CLIENT args-> 127.0.0.1 3000
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class ReversiClient {
public static void main(String[] args) {
if (args.length != 2){
System.out.println("Usage: java ReversiClient <host name> <port>");
System.exit(1);
}
String hostName = args[0];
int portNumber = Integer.parseInt(args[1]);
System.out.println("Echo client connnecting to " + hostName + ":" + portNumber);
try (
Socket reversiSocket = new Socket(hostName, portNumber);
PrintWriter outOne =
new PrintWriter(reversiSocket.getOutputStream(), true);
BufferedReader inOne =
new BufferedReader(
new InputStreamReader(reversiSocket.getInputStream()));
BufferedReader stdInOne =
new BufferedReader(
new InputStreamReader(System.in));
) {
try (
PrintWriter outTwo =
new PrintWriter(reversiSocket.getOutputStream(), true);
BufferedReader inTwo =
new BufferedReader(
new InputStreamReader(reversiSocket.getInputStream()));
BufferedReader stdInTwo =
new BufferedReader(
new InputStreamReader(System.in));
) {
} catch (IOException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
}
} catch (IOException e) {
System.err.println("Don't know about host " + hostName);
System.exit(1);
}
}
}
Socket reversiSocket = new Socket(hostName, portNumber);
initializes the connection, you do not create a new Socket
for your second connection 初始化连接,您没有为第二个连接创建新的
Socket
Add Socket reversiSocketTwo = new Socket(hostName, portNumber);
添加
Socket reversiSocketTwo = new Socket(hostName, portNumber);
to your second try block in your client, get the streams from that, and test again 到客户端的第二个try块,从中获取流,然后再次测试
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.