как мне отправить строку через сервер в цикле?

#java

#java

Вопрос:

 Socket s1=new Socket("localhost",3001);
System.out.println("Client process");
byte b[]=new byte[150];
int n=4;
BufferedReader BR=new BufferedReader(new InputStreamReader(s1.getInputStream()));
String str=new String();
while((str=BR.readLine())!=null)
{
    System.out.println();
    System.out.println(str);
}
s1.close();
  

В приведенном выше коде я пытаюсь прочитать строку с сервера и распечатать эту строку на клиентском компьютере.Но клиент не мог прочитать строку, пока сервер не закончит запись всех строк и не закроется.Пожалуйста, помогите мне, как читать строку с сервера за раз.

Комментарии:

1. Можете ли вы изменить код сервера?. Если да, пожалуйста, покажите и этот код.

2. ServerSocket s1=новый ServerSocket(3001); Сокет clientSocket=s1.accept(); RandomAccessFile Ra=новый RandomAccessFile(«C:/HelloWorld.java «,»r»); OutputStream OS=clientSocket.getOutputStream(); String str=новая строка («hai»); BufferedReader BR=новый BufferedReader(новыйInputStreamReader(System.in )); while((str=Ra.readLine())!=null) { System.out.println(str); BR.read(); OS.write(str.getBytes()); } clientSocket.close();

3. вы используете nio случайно? код должен работать с использованием обычного io . Вы получаете какое-то исключение, которое вы не улавливаете? Ваш код практически такой же, как в Example Depot для чтения текста из сокета

4. нет, я нигде не использую nio. Вместо чтения строки каждый раз, когда моя клиентская программа считывает все данные, записанные сервером одновременно. Но я хочу прочитать строку.

5. Ваш код на стороне сервера выглядит как странная смесь кода на стороне клиента и сервера, попробуйте понять, что вы делаете, посмотрев на пример KnockKnockServer.

Ответ №1:

Проверьте, сбрасывает ли сервер свой выходной поток после каждой строки.

Ответ №2:

Клиентский код :

 Socket s1=new Socket("localhost",4444); 
    System.out.println("Client process"); 
    byte b[]=new byte[150]; 
    int n=4; 
    BufferedReader BR= new BufferedReader(new InputStreamReader(s1.getInputStream())); 
    String str=new String(); 
    while((str=BR.readLine())!=null) {     
        System.out.println();     
        System.out.println(str); 
    } 
    s1.close(); 
  

Простой серверный код :

 ServerSocket serverSocket = null;        
    try {             
        serverSocket = new ServerSocket(4444); 
        }
    catch (IOException e) {
        System.err.println("Could not listen on port: 4444.");   
        System.exit(1);      
    }          
    Socket clientSocket = null; 
    try {        
        clientSocket = serverSocket.accept();
    }
    catch (IOException e) { 
        System.err.println("Accept failed.");  
        System.exit(1);   
    }           
    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
    BufferedReader in = new BufferedReader(  
            new InputStreamReader(clientSocket.getInputStream()));
    String inputLine, outputLine; 
    // write to client
    for(int i=0;i<10;i  ){
        out.println("hello from server"   i);
        Thread.sleep(1000);
        System.out.println("Server sent "   i);
    }

    out.close();         
    in.close();         
    clientSocket.close();         
    serverSocket.close();     
    System.err.println("Server done.. closing now..");  
  

PS: добавьте их в основные методы и добавьте предложение throws с соответствующими исключениями.