загрузка и выгрузка файлов между сервером-клиентом - PullRequest
4 голосов
/ 23 января 2011

У меня есть задание на создание приложения для передачи файлов клиент-сервер. Это может быть простой пример. Я попробовал примеры, приведенные в похожих вопросах в SOF, но они не смогли передать файл.

Я пытаюсь связать клиента и сервер через сокеты. Если бы был кто-то, кто мог бы помочь мне, я был бы рад.

Клиент загрузит файл на сервер. Также клиент может загрузить файл с сервера. Так я бы создал приложение.

Вот код на стороне клиента:

package wdc;

import java.io.*;
import java.io.ByteArrayOutputStream;
import java.net.*;

class TCPClient {

    public static void main(String args[]) {
        byte[] aByte = new byte[1];
        int bytesRead;

        Socket clientSocket = null;
        InputStream is = null;

        try {
            clientSocket = new Socket("127.0.0.1", 3248);
            is = clientSocket.getInputStream();
        } catch (IOException ex) {
            // Do exception handling
        }

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        if (is != null) {

            FileOutputStream fos = null;
            BufferedOutputStream bos = null;
            try {
                fos = new FileOutputStream("C:\\testout.pdf");
                bos = new BufferedOutputStream(fos);
                bytesRead = is.read(aByte, 0, aByte.length);

                do {
                        baos.write(aByte);
                        bytesRead = is.read(aByte);
                } while (bytesRead != -1);

                bos.write(baos.toByteArray());
                bos.flush();
                bos.close();
                clientSocket.close();
            } catch (IOException ex) {
                // Do exception handling
            }
        }
    }
}

Вот код на стороне сервера:

package wds;

import java.io.*;
import java.net.*;

class TCPServer {

    public static void main(String args[]) {

        while (true) {
            ServerSocket welcomeSocket = null;
            Socket connectionSocket = null;
            BufferedOutputStream outToClient = null;

            try {
                welcomeSocket = new ServerSocket(3248);
                connectionSocket = welcomeSocket.accept();
                outToClient = new BufferedOutputStream(connectionSocket.getOutputStream());
            } catch (IOException ex) {
                // Do exception handling
            }

            if (outToClient != null) {
                File myFile = new File("C:\\testserver.pdf");
                byte[] mybytearray = new byte[(int) myFile.length()];

                FileInputStream fis = null;

                try {
                    fis = new FileInputStream(myFile);
                } catch (FileNotFoundException ex) {
                    // Do exception handling
                }
                BufferedInputStream bis = new BufferedInputStream(fis);

                try {
                    bis.read(mybytearray, 0, mybytearray.length);
                    outToClient.write(mybytearray, 0, mybytearray.length);
                    outToClient.flush();
                    outToClient.close();
                    connectionSocket.close();

                    // File sent, exit the main method
                    return;
                } catch (IOException ex) {
                    // Do exception handling
                }
            }
        }
    }
}

Я не смог запустить эти исходные файлы, и я не знаю почему.

1 Ответ

4 голосов
/ 24 января 2011

Я посмотрел на код, и на первый взгляд в нем не было ничего плохого. Итак, я скопировал его как есть, изменил файл, используемый в коде сервера, на файл, который существовал в моей системе, и запустил код. Это сработало просто отлично, так что, по крайней мере, я могу заверить вас, что код верен, и он делает то, что должен делать. Я запустил свой код на машине с Ubuntu, но я не уверен, как это может повлиять на результат.

Всего лишь несколько советов, которые мне помогут: 1) Запускаете ли вы файл TCPServer, а затем TCPClient? (Тупой, я знаю, но ты никогда не знаешь) 2) Есть ли процесс, который может использовать порт 3248? 3) Имеет ли процесс, выполняющий файлы, разрешение на чтение / запись указанных путей? 4) Существует ли файл, указанный в TCPServer? 5) Пробовали ли вы запускать файлы классов за пределами IDE - в любом случае полезно научиться быть независимым от IDE.

Надеюсь, что это было полезно и удачи в выполнении вашего задания.

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