Итак, я пытаюсь создать простую клиентскую программу сервера, где несколько клиентов могут подключаться к одному серверу. Я запускаю поток как на стороне клиента, так и на стороне сервера. У меня есть файл «loginuser.txt», который имеет текст для 5 строк. Этот код является потоком сервера. Когда я вызываю outToClient.println («xxx») или что-то еще, клиент НЕ принимает БОЛЬШЕ, чем одну строку за раз. Каждый раз, когда пользователь вводит что-либо на клавиатуре (на клиентском терминале), следующая строка файла отображается на том же терминале. Может кто-нибудь сказать мне, почему это происходит? Где я иду не так? Основная проблема: для println() одной строки от сервера к клиенту мне кажется, что я каждый раз набираю что-то на стороне клиента.Программирование сокетов в Java - проблема с записью в клиентский сокет со стороны сервера
BufferedReader inFromUser=new BufferedReader(new InputStreamReader(System.in));
BufferedReader inFromClient=new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedReader userlogr=new BufferedReader(new FileReader("loginuser.txt"));
PrintWriter outToClient = new PrintWriter(client.getOutputStream(), true);
if(check==1)
{
fromclient=inFromClient.readLine();
if(fromclient.compareTo("xxx")==0)
{
String line;
while((line=userlogr.readLine())!=null)
{
System.out.println(line);
outToClient.println(line);
outToClient.flush();
}
}
}
Похоже, что проблема с клиентом. Он находится в цикле, где он приостанавливается для ввода, и у вас есть только один поток, который обрабатывает как пользовательский ввод, так и прием данных с сервера. Отредактируйте сообщение и покажите код клиента. –
Звучит как проблема протокола (ваш протокол). Я предполагаю, что клиент читает только одну строку для каждой отправляемой строки. Если вы хотите отправить несколько строк в один ответ, вам нужно иметь другой способ узнать, когда вы получили все сообщение. –
Можете ли вы показать соответствующий код клиента? – Fildor