我正在编写一个客户端应用程序,通过tcp/ip接收连续的数据流。我遇到的问题是缓冲读取器对象没有接收到任何数据,并且在readline方法处停滞不前。
服务器的工作方式是连接到它,然后发送身份验证信息以接收数据。下面是我的代码要点。
我创建了一个样例服务器应用程序,按照我认为的服务器发送数据的方式发送数据,并成功连接、接收和处理数据。我可以在我的应用程序中成功连接到服务器。我也可以telnet到服务器并写入身份验证字符串,使用telnet接收大量数据。然而,我的应用程序在与服务器进行readLine时却一直挂起,我已经没有任何想法为什么会这样。
通过telnet进来的数据看起来像是以下连续流:
服务器的工作方式是连接到它,然后发送身份验证信息以接收数据。下面是我的代码要点。
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处卡住了,我没有正确输出认证行吗?我没有收到任何错误信息...
编辑 我的示例服务器代码(正常工作)...再次强调,这只是模拟我认为真实服务器运行的方式,但我可以连接到两个服务器,只是无法从真实服务器接收数据。
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();
}