我正在研究基于java服务器客户端的套接字项目文件传输,我将很快总结项目,我有与服务器和客户端相关的文本文件,服务器相关文本包含将要打开的端口和客户端文本包含要连接的IP和端口(服务器端像4444,客户端就像4444本地主机)单个客户端上的文件传输运行相当正常,现在我正在进行第二个客户端连接和传输,我想做的是;当第二个客户端运行时,它将读取文本文件的第一行(已经被第一个客户端使用),我认为递归将解决问题,但似乎我无法弄清楚我做了什么错误,下面是客户端的代码段
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块(我从if检查println
获取消息控制台和if检查中的is
代表InputStream)这意味着有来自服务器的流,这是正常的吗?如果是这样的话,如果端口被另一个客户端绑定,我怎样才能实现整个连接方法的重复?