我正在开发基于 java 服务器-客户端的基于套接字项目的文件传输,我将很快总结该项目,我有与服务器和客户端相关的文本文件,与服务器相关的文本包含将要打开的端口和客户端文本包含要连接的 IP 和端口(服务器端类似于 4444,客户端类似于 4444 localhost)单个客户端上的文件传输运行良好,现在我正在处理第二个客户端连接和传输,我我想做的是;当第二个客户端运行时,它将读取文本文件的第一行(第一个客户端已经在使用),我认为递归可以解决问题,但似乎我无法弄清楚我做了什么错了,下面是客户端的代码片段
boolean connected = false;
private void connection() {
while (!connected) {
try {
FileReader fr = new FileReader("c_input.txt");
BufferedReader br = new BufferedReader(fr);
String line = br.readLine();
String delims = "[ ]";
String[] elements = new String[8];
elements = line.split(delims);
serverPort = Integer.parseInt(elements[portIndex]);
hostIP = elements[ipIndex];
clientSocket = new Socket(hostIP, serverPort);
is = clientSocket.getInputStream();
if (is != null) {
connected = true;
System.out.println("connected to " + hostIP + " from port "
+ serverPort);
br.close();
fr.close();
} else {
System.out.println("The port " + serverPort
+ " is occupied, now trying another port.");
portIndex = portIndex + 2;
ipIndex = ipIndex + 2;
connection();
}
} catch (NumberFormatException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
System.exit(0);
}
}
}
我在那里使用了递归,因为如果一个端口被另一个客户端绑定,它必须从文本文件中读取另一行并拆分并重试与新行输入的连接。(简而言之,整个方法将再次运行)但是当涉及到运行时,第一个客户端连接,当第二个客户端尝试从同一端口与 client1 连接时,代码仍然进入 if 循环而不是进入 else 块(我从println
控制台上的 if 检查中获取消息,顺便说一下is
在 if check 代表 InputStream),这意味着有来自服务器的流,这是正常的吗?如果是这样,如果端口被另一个客户端绑定,我如何才能重新实现整个连接方法?