在java中向客户端发送文件

时间:2011-12-09 17:31:26

标签: java file-upload client-server

我是java的新手。我正在尝试创建一个简单的java文件服务器,客户端可以从中请求文件并下载它。基本上当客户端请求文件时,它将简单地从服务器的文件夹写入客户端文件夹。当我运行我的代码时,它不显示任何错误,但客户端请求的文件也没有写入它的文件夹。

我的客户端代码:

public void download(Socket s) throws Exception {
     DataInputStream din=new DataInputStream(s.getInputStream());
     DataOutputStream dout=new DataOutputStream(s.getOutputStream());
     BufferedReader r = new BufferedReader(new InputStreamReader(s.getInputStream()));
     BufferedReader con = new BufferedReader(new InputStreamReader(System.in));
     PrintWriter w = new PrintWriter(s.getOutputStream(), true);
    System.out.print("Enter File Name :");
    String request = con.readLine();
    w.println(request);
    String msg = r.readLine();
    if (msg.startsWith("ERROR")) {
        System.out.println("File not found on Server ...");
        return;
    } else if (msg.startsWith("FOUND")) {
        System.out.println("Receiving File ...");
        File f = new File(request);
        if (f.exists()) {
            String Option;
            System.out.println("File Already Exists. Want to OverWrite (Y/N) ?");
            Option = con.readLine();
            if (Option == "N") {
                dout.flush();
                return;
            }
        }
        FileOutputStream fileout = new FileOutputStream(f);
        int ch;
        String temp;
        do {
            temp = din.readLine();
            ch = Integer.parseInt(temp);
            if (ch != -1) {
                fileout.write(ch);
            }
        } while (ch != -1);
        fileout.close();
        System.out.println(din.readLine());
    }
}

服务器端:

public class Fileagent extends Thread {

    Socket client;
    DataInputStream din;
    DataOutputStream dout;
    ServerSocket soc;
    PrintWriter w;
    BufferedReader r;

    public Fileagent(Socket soc) {
        try {
            client = soc;
            din = new DataInputStream(client.getInputStream());
            dout = new DataOutputStream(client.getOutputStream());
            w = new PrintWriter(client.getOutputStream(), true);
            r = new BufferedReader(new InputStreamReader(client.getInputStream()));
            BufferedReader con = new BufferedReader(new InputStreamReader(System.in));
            System.out.println("FTP Client Connected ...");
            start();

        } catch (Exception ex) {
        }
    }

    public void upload() throws Exception {


        w.println("SEnding.....");
        String file = r.readLine();
        File f = new File(file);
        if (!f.exists()) {
            w.println("ERROR");
            return;
        } else {
            w.println("FOUND");
            FileInputStream fin = new FileInputStream(f);
            int ch;
            do {
                ch = fin.read();
                w.println(String.valueOf(ch));
            } while (ch != -1);
            fin.close();
        }

我正在尝试发送简单的文本文件,但文件没有发送给客户端。

提前致谢。

2 个答案:

答案 0 :(得分:1)

我怀疑问题是您在从客户端向服务器发送请求后没有刷新PrintWriter

w.println(request);
w.flush();

您似乎也在服务器端使用PrintWriter。完成发送内容后,请务必致电w.flush()w.close()

另外,我假设您意识到这是一种非常低效的文件发送方式。

答案 1 :(得分:1)

看起来您的问题源于此

String request=con.readLine();

您总是从这个con对象中读取内容。但是你将Socket s传递给方法。

还有其他一些问题,例如Gray提到的问题,以及你在自己的行上写下每个字符的问题,但这些问题只是搞砸了格式化;它们不应该阻止你获取文件......