Буферизованный считыватель не получает данные из сокета

Я пишу клиентское приложение, которое будет получать непрерывный поток данных через tcp / ip. Проблема, с которой я столкнулся, заключается в том, что буферный объект чтения не получает никаких данных и зависает в методе readline.

Сервер работает так, что вы подключаетесь к нему, а затем отправляете информацию аутентификации для получения данных. Суть моего кода приведена ниже

socket = new Socket(strHost, port);
authenticate();
inStream = new BufferedReader(new InputStreamReader(socket.getInputStream()));
process(inStream);

authenticate()
{      
  PrintWriter pwriter = new PrintWriter(socket.getOutputStream(), true);
  pwriter.println(authString);
}

process(BufferedReader bufferedReader)
{
   while((line = bufferedReader.readLine()) != null)
      dostuff
}

. Я создал пример серверного приложения, которое отправляет данные так, как (я думаю) сервер отправляет данные, и он подключается, получает и обрабатывает данные нормально. Я могу нормально подключиться к серверу в своем приложении. Я также могу подключиться к серверу по telnet, написать строку аутентификации и получить поток данных с помощью telnet. Однако мое приложение просто зависает на readLine с сервером, и я не понимаю, почему.

Входящие данные (по крайней мере, через Telnet) выглядят как непрерывный поток следующего содержания:

 data;data;data;data;data
 data;data;data;data;data

Почему мое приложение зависает в строке чтения, я неправильно выводю строку аутентификации? Я не получаю ошибок ...

ИЗМЕНИТЬ Мой пример кода сервера (который работает правильно) ... опять же, это только имитация способа Я думаю , что работает реальный сервер, но я могу подключиться к обоим в моем приложении, просто не получая данные с реального сервера .

  public static void main(String[] args) throws IOException
  {
  ServerSocket serverSocket = null;

  try
  {
     serverSocket = new ServerSocket(1987);
  }
  catch (IOException e)
  {
     System.out.println("Couldn't listen on port: 1987");
     System.exit(-1);
  }

  Socket clientSocket = null;
  try
  {
     clientSocket = serverSocket.accept();
  }
  catch (IOException e) {
     System.out.println("Accept failed: 1987");
     System.exit(-1);
  }

  PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
  BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
  String something;

  while ((something = in.readLine()) != null)
  {
     while(true)
     {
        out.println(message);
     }
  }



  out.close();
  in.close();
  clientSocket.close();
  serverSocket.close();
}
5
задан Ryan 15 June 2011 в 15:31
поделиться