Я пишу клиентское приложение, которое будет получать непрерывный поток данных через 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();
}
I can connect to the server fine in my application.
Вы имеете в виду свой фиктивный образец сервера? - person leonbloy   schedule 15.06.2011