Проверьте входящие данные в Java Socket - PullRequest
7 голосов
/ 13 января 2012

Я пишу простой чат на Java и хочу проверить, есть ли какие-то данные, ожидающие на BufferedReader.Я читал о NIO, но я не совсем понял это.Вот мой код:

public void Send(String data)
{
    out.println(data);
}

public String Recv()
{
    if (dataIncomming)
    {
        try {
            return in.readLine();
        } catch (IOException e) {
            System.err.println("Send: Error on BufferedReader.readLine() - IOException");
        }
    }
    else return "";
}

Я не знаю, что заполнить dataIncomming ...

Ответы [ 2 ]

8 голосов
/ 13 января 2012

Используйте метод Stream.Available () . Вы также можете подождать, пока не будет получено правильное количество байтов, и подождать, чтобы поток не работал 100% времени.

while(Stream.Available() != 0); //block until there is data

try{  
    return in.readLine();  
} catch (IOException e) {  
    System.err.println("Send: Error on BufferedReader.readLine() - IOException");  
} 
0 голосов
/ 06 сентября 2018

Вы можете использовать метод InputStream.available () , чтобы проверить, сколько байтов в настоящее время поступило во входной поток сокета.

public String Recv()
{
    if (in.available() > 0)
    {
        try {
            return in.readLine();
        } catch (IOException e) {
            System.err.println("Send: Error on BufferedReader.readLine() - IOException");
        }
    }
    else return "";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...