服务器和客户端输入流之间的文件传输

时间:2013-08-23 09:34:06

标签: java sockets file-transfer

我正在研究基于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)这意味着有来自服务器的流,这是正常的吗?如果是这样的话,如果端口被另一个客户端绑定,我怎样才能实现整个连接方法的重复?

0 个答案:

没有答案