Я пишу клиентское приложение, которое будет получать непрерывный поток данных через 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
Почему мое приложение висит на readline, неправильно ли я вывожу строку аутентификации? Я не получаю никаких ошибок ...
EDIT
Мой пример кода сервера (который работает правильно) ... опять же, это только имитирует способ Я думаю настоящий сервер работает, но я могу подключиться к обоим в моем приложении, просто нет получать данные с реального сервера.
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();
}