Formatter не работает через сокеты

183
03 апреля 2019, 07:50

Если создать Formatter из сокетного OutputStream-a, то .format() не отрабатывает как ожидается:

Server:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(12345);
        Socket client = serverSocket.accept();
        Scanner scan = new Scanner(client.getInputStream());
        if (scan.hasNextLine()) {
            System.out.println(scan.nextLine());
        }
    }
}

Client:

import java.io.IOException;
import java.net.Socket;
import java.util.Formatter;
public class Client {
    public static void main(String[] args) throws IOException {
        // Этот кусок работает:
        Formatter stdOutFormatter = new Formatter(System.out);
        stdOutFormatter.format("My name is %s. I am %d years old.", "Test", 99);
        Socket s = new Socket("localhost", 12345);
        // А этот - нет:
        Formatter socketFormatter = new Formatter(s.getOutputStream());
        socketFormatter.format("My name is %s. I am %d years old.", "Alex", 43);
    }
}
Answer 1

Вам необходимо добавить flush() после отправки сообщения

public class Client {
    public static void main(String[] args) throws IOException {
        // Этот кусок работает:
        Formatter stdOutFormatter = new Formatter(System.out);
        stdOutFormatter.format("My name is %s. I am %d years old.", "Test", 99);
        Socket s = new Socket("localhost", 12345);
        // А этот - нет:
        Formatter socketFormatter = new Formatter(s.getOutputStream());
        socketFormatter.format("My name is %s. I am %d years old.", "Alex", 43);
        socketFormatter.flush(); // эта линия была добавлена
    }
}
READ ALSO
SpringLiquibase работа с ресурсами

SpringLiquibase работа с ресурсами

В моем проекте есть тестовый модуль, и модули-pojo с hibernate entity классами

189
Нарисовать овальный SeekBar с ограничениями

Нарисовать овальный SeekBar с ограничениями

Розовая область: по этой области овал должен двигаться по вертикалиБелый шарик должен перетаскиваться по нижней линии овала

147
Picasso в цикле, создается ли он каждый раз?

Picasso в цикле, создается ли он каждый раз?

При данном коде, Picasso создается каждый раз или же там существует что-то, что не позволяет создавать один и тот же объект Picasso?

147
regexp. Как заменить все кроме шаблона?

regexp. Как заменить все кроме шаблона?

мне нужно получить SIP/101

139