Я пишу клиентское приложение, которое будет получать непрерывный поток данных через 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();
}