【发布时间】:2011-09-15 15:17:57
【问题描述】:
我正在编写一个客户端应用程序,它将通过 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
}
我创建了一个示例服务器应用程序,它以(我认为)服务器发送数据的方式发送数据,它连接、接收和处理数据。我可以在我的应用程序中很好地连接到服务器。我还可以远程登录到服务器并写入身份验证字符串并使用远程登录接收大量数据。然而,我的应用程序只是挂在服务器的 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();
}
【问题讨论】:
-
你能告诉我们与问题相关的服务器代码吗?
-
I can connect to the server fine in my application.你的意思是你的虚拟样本服务器? -
也许您应该在发送身份验证之前准备好另一个线程来读取您的数据?我假设服务器一得到密码就开始泛滥数据。
-
Mannimarco,我可以展示示例服务器...我没有连接到服务器的代码。 Leonbloy,我可以很好地连接到两台服务器。
标签: java sockets inputstream bufferedreader