отправка файла клиенту в Java - PullRequest
0 голосов
/ 09 декабря 2011

Я новичок в 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 ]

1 голос
/ 09 декабря 2011

Похоже, ваша проблема проистекает из этого

String request=con.readLine();

Вы всегда читаете из этого con объекта.Но вы передаете Socket s методу.

Существуют и другие проблемы, такие как упомянутое Греем, а также то, что вы пишете каждый символ в отдельной строке, но они просто запутаныформатирование вверх;они вообще не должны мешать вам получить файл ...

1 голос
/ 09 декабря 2011

Я подозреваю, что проблема в том, что вы не сбрасываете PrintWriter после отправки запроса от клиента на сервер:

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

Вы, похоже, используете PrintWriter на стороне сервератакже.Обязательно позвоните w.flush() или w.close(), когда закончите отправку материала.

Кроме того, я предполагаю, что вы понимаете, что это крайне неэффективный способ отправки файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...