【发布时间】:2012-01-03 15:50:00
【问题描述】:
我有一个非常特殊的问题,我最后的办法是在 StackOverflow 上问这个问题,所以请保持开放的心态!
这里有两个程序:
A.客户端:运行在 Android 手机上的 java 客户端。 B. 服务器:在计算机上运行的 java 服务器。
以下是这两个程序的作用:
客户端每 2 毫秒(非常快)发送一次服务器坐标(以字符串格式),服务器必须读取客户端发送给它的所有坐标。为了实现这一点(假设服务器位于 10.0.0.1 并且正在侦听端口 54321),服务器必须有一个套接字,通过该套接字读取所有传入信息。是的,它确实接收到所有信息,但是,有一个问题!
既然你已经了解了故事背后的背景,那么问题来了:
客户端连接到服务器,一旦发生这种情况,它就开始以极快的速度发送坐标(字符串格式)。服务器确实收到了所有消息,但它不会停止读取,除非客户端已断开连接。我需要的是服务器在收到每条消息时单独读取它们!
这是我用来从套接字读取的代码(这是用于服务器的,它在自己的线程上):
while(true) {
try {
BufferedReader socketReader =
new BufferedReader(new InputStreamReader(socket.getInputStream()));
String str = socketReader.readLine();
System.out.println("New Message: " + str);
socketReader.close();
} catch (IOException e) {
//Client disconnected
System.out.println("Client disconnected.");
break;
}
}
这是我从客户端得到的输出(其中 x 和 y 是数字):
New Message: x,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,yx,y...and so on
并且该文本仅在客户端断开连接后显示。我希望它在消息进来时显示出来。
澄清一下,这是所需的输出:
New Message: x,y
New Message: x,y
New Message: x,y
New Message: x,y
... and so on
如果这有任何用处,这里是写入套接字的方法(此代码来自客户端)
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
while(running) {
writer = new PrintWriter(socket.getOutputStream(), true);
writer.write(x+","+y);
writer.flush();
}
总而言之,我需要让我的服务器在消息进入时读取它们,而不是在客户端断开连接后同时读取它们。 P.S 在 C# 中我还编写了一个服务器,它会读取传入的信息,但在 Java 中这行不通!
【问题讨论】:
-
是不是有什么问题?似乎发生了 IOException。
标签: java sockets networking tcp