#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 с соответствующими исключениями.