InputStream и BufferedReader - PullRequest
       38

InputStream и BufferedReader

0 голосов
/ 20 октября 2019

Я делаю приложение чата между несколькими клиентами в C #, которые подключаются к одному Java-серверу.

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

У каждого клиента есть отдельная нить на сервере, и у меня есть нить;

public class ServerThread extends Thread {

private Server server;
private Socket sck;

InputStream receive;
OutputStream send;

public ServerThread(Server server, Socket s) {
    this.server = server;
    sck = s;
}

public void run() {
    try {
        handleClient();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private void handleClient() throws IOException {
    receive = sck.getInputStream();
    send = sck.getOutputStream();

    byte[] b = new byte[1024];
    receive.read(b);
    System.out.print(new String(b));

    BufferedReader reader = new BufferedReader(new InputStreamReader(receive, "UTF-8"));
    String line;

    while((line = reader.readLine()) != null) {
        if(line.equalsIgnoreCase("quit"))break;
        List<ServerThread> clients = server.getClients();
        for(ServerThread allClients : clients) {
            allClients.send(line);
        }
    }
}

private void send(String message) {
    try {
        send.write(message.getBytes());
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

И моя проблема:

когда клиент отправляет что-то на сервер, я могу прочитать это;

byte[] b = new byte[1024];
receive.read(b);
System.out.print(new String(b));

Я получаю правильную строку, которую я отправил, но BufferedReader ничего не получает. Программа никогда не входит в цикл while, потому что

line = reader.readLine();

ничего не читает, поэтому я понятия не имею, что не так. Почему «InputStream # read (byte)» работает, а «BufferedReader # readLine ()» не работает ..?

Вот что я посылаю приложением C #;

byte[] text = System.Text.Encoding.UTF-8.GetBytes("test1212");
sck.Send(text);

Что-тоне так с этим сообщением? : v

РЕДАКТИРОВАТЬ: Даже с "\ r \ n" в конце сообщения, которое я отправляю, Буферизованный не читает его .. Как я должен добавить возврат каретки к сообщению?

Надеюсь, кто-нибудь найдет, что не так.

Спасибо за попытку помочь мне. (Извините, если я сделал ошибки, я француз: l)

1 Ответ

1 голос
/ 20 октября 2019

Чтение javadoc: BufferedReader.readLine ()

"... Считывает строку текста. Строка считается завершенной любым из перевода строки ('\n '), возврат каретки (' \ r ') или возврат каретки, за которым сразу следует перевод строки. ... "

Ваша строка не имеет конца строки. BufferedReader ждет его.

...