套接字,java发送文件服务器客户端

时间:2011-05-22 10:39:57

标签: java

我想通过套接字发送文件。 “服务器”位于另一台计算机上,而另一台计算机上也位于另一台计算机上。该文件可以来回服务器和客户端,但只能在当前目录中。我现在采用的方法是使用文件输入流并在文件输出流上写入文件neverthelees这根据我的理解不起作用..是否有另一种通过套接字发送文件的方法?

这是我的代码,这里可能有什么问题?

public class Copy {

    private ListDirectory dir;
    private Socket socket;

    public Copy(Socket socket, ListDirectory dir) {
        this.dir = dir;
        this.socket = socket;
    }

    public String getCopyPath(String file) throws Exception {
        String path = dir.getCurrentPath();
        path += "\\" + file;
        return path;

    }

    public void copyFileToClient(String file, String destinationPath) 
    throws Exception {

        byte[] receivedData = new byte[8192];
        BufferedInputStream bis = new BufferedInputStream(
                    new FileInputStream(getCopyPath(file)));
        String findDot = file;
        String extension = "";

        for (int i = 0; i < findDot.length(); i++) {
            String dot = findDot.substring(i, i + 1);
            if (dot.equals(".")) {
                extension = findDot.substring(i + 1);
            }
        }
        if (extension.equals("")) {
            extension = "txt";
        }
        BufferedOutputStream bos = new BufferedOutputStream(
                    new FileOutputStream(new File(destinationPath + "\\"
                + "THECOPY" + "." + extension)));

        int len;

        while ((len = bis.read(receivedData)) > 0) {

            bos.write(receivedData, 0, len);
        }
        //      in.close();
        bis.close();
        //      output.close();
        bos.close();

    }

    //  public static void main(String args[]) throws Exception {
    //      Copy copy = new Copy();
    //      System.out.print(copy.getCopyPath("a"));
    //  }

}

还有一些客户端代码:

...

DataOutputStream outToServer = new DataOutputStream(
        clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(
        new InputStreamReader(clientSocket.getInputStream()));
boolean exit = false;

else if (sentence.length() > 3 && sentence.substring(0, 3).equals("get")) {
        String currPath = dir.getCurrentPath();
        outToServer.writeBytes(sentence + "_" + currPath + "\n");

} else {

...

1 个答案:

答案 0 :(得分:3)

您的copyFileToClient方法直接使用FileInputStream和FileOutputStream,即它根本不会从客户端传输任何内容,只能从一个本地文件传输到另一个本地文件。如果您想远程管理服务器上的文件,但没有帮助在不同计算机之间发送数据,这很好。

你必须以某种方式通过Socket的OutputStream / InputStream发送数据 - 即使用发送端的FileInputStream和接收端的FileOutputStream。