Отправить строку с сервера на клиент - сохранить ее как текстовый файл

Я знаю, как отправить файл с сервера клиенту, но как отправить текстовую строку клиенту, где клиент сохранит строку в виде файла? Должен ли я использовать PrintWriter для этой проблемы?

Это код для отправки файла с сервера на клиент: Отправка файлов через сокеты

Что я хочу сделать, так это (вместо отправки файла) отправить String с сервера и позволить клиенту получить его и сохранить в виде файла.

public class SocketFileExample {
    static void server() throws IOException {
        ServerSocket ss = new ServerSocket(3434);
        Socket socket = ss.accept();
        InputStream in = new FileInputStream("send.jpg");
        OutputStream out = socket.getOutputStream();
        copy(in, out);
        out.close();
        in.close();
    }

    static void client() throws IOException {
        Socket socket = new Socket("localhost", 3434);
        InputStream in = socket.getInputStream();
        OutputStream out = new FileOutputStream("recv.jpg");
        copy(in, out);
        out.close();
        in.close();
    }

    static void copy(InputStream in, OutputStream out) throws IOException {
        byte[] buf = new byte[8192];
        int len = 0;
        while ((len = in.read(buf)) != -1) {
            out.write(buf, 0, len);
        }
    }

    public static void main(String[] args) throws IOException {
        new Thread() {
            public void run() {
                try {
                    server();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();

        client();
    }
}

person java    schedule 17.05.2015    source источник
comment
означает, что вы хотите сказать, что сервер отправит строку, а клиент сохранит эту строку в файле...???   -  person ELITE    schedule 17.05.2015
comment
@NiRRaNjANRauT - да, верно - (строка содержит символы UTF-8)   -  person java    schedule 17.05.2015


Ответы (1)


в этом случае используйте ObjectOutputStream на стороне сервера для записи строки и используйте ObjectInputStream на стороне клиента для чтения строки, поступающей с сервера.

поэтому ваш метод server() будет выглядеть так..

static void server() throws IOException {
    ServerSocket ss = new ServerSocket(3434);
    Socket socket = ss.accept();
    OutputStream out = socket.getOutputStream();
    ObjectOutputStream oout = new ObjectOutputStream(out);
    oout.writeObject("your string here");
    oout.close();
}

и метод client() будет выглядеть так..

static void client() throws IOException, ClassNotFoundException {
    Socket socket = new Socket("localhost", 3434);
    InputStream in = socket.getInputStream();
    ObjectInputStream oin = new ObjectInputStream(in);
    String stringFromServer = (String) oin.readObject();
    FileWriter writer = new FileWriter("received.txt");
    writer.write(stringFromServer);
    in.close();
    writer.close();
}

также добавьте ClassNotFoundException в основной метод.

public static void main(String[] args) throws IOException, ClassNotFoundException {.......}

Выполнено...

person ELITE    schedule 17.05.2015