我有一个非常奇怪的问题,我的最后一招是在StackOverflow上询问这个问题,所以请大家开放!阅读Java服务器插座
这里有两个方案:
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();
}
所以,这一切的一切,我需要的是我的服务器读取消息,因为他们进来,而不是读他们都在客户端断开连接后的同一时间。在C#中,我也写了一个服务器,并且这个服务器正在读取这个信息,但是在Java中,这并不能解决问题!
是不是有什么问题?看来IOException发生了。 – kosa 2012-01-03 02:41:02