【发布时间】:2012-06-16 21:11:51
【问题描述】:
我的 java 套接字代码有点问题。 我正在编写一个 android 客户端应用程序,它通过直接(!)无线连接将数据发送到我的电脑上的 java 多线程套接字服务器。它工作正常,但我想为移动应用程序改进它,因为它现在非常耗电。当我在我的代码中删除两个特殊行时,我的移动设备(htc one x)的 cpu 使用率完全没问题,但是我的连接似乎有很高的 ping 率或类似的东西......
这是我接收客户端数据的服务器代码 sn-p:
while(true)
{
try {
....
Object obj = in.readObject();
if(obj != null) {
Class clazz = obj.getClass();
String className = clazz.getName();
if(className.equals("java.lang.String")) {
String cmd = (String)obj;
if(cmd.equals("dc")) {
System.out.println("Client "+id+" disconnected!");
Server.connectedClients[id-1] = false;
break;
}
if(cmd.substring(0,1).equals("!")) {
robot.keyRelease(PlayerEnum.getKey(cmd,id));
}
else {
robot.keyPress(PlayerEnum.getKey(cmd,id));
}
}
}
} catch ....
这里是客户端部分,我在 while 循环中发送我的数据:
private void networking() {
try {
if(client != null) {
....
out.writeObject(sendQueue.poll());
....
}
} catch ....
当我写这个为什么时,我每次执行 while 循环时都会发送数据。当 sendQueue 为空时,将发送一个空的“对象”。这会导致“高”网络流量和“高”cpu 使用率。但是:几乎立即收到所有发送 cmets。
当我将代码更改为以下内容时:
while(true)
...
if(sendQueue.peek() != null) {
out.writeObject(sendQueue.poll());
}
...
cpu 使用情况完全没问题,但我遇到了一些滞后.. 命令到达的速度不够快.. 正如我所说,如果我正在发送数据(使用空对象),它可以正常工作(除了 cpu 使用情况) ) 每次执行。但我确信这是一种非常粗糙的编码风格,因为我有点淹没网络。有什么提示吗?
我做错了什么??
感谢您的帮助!
此致, maaft
【问题讨论】:
标签: java android sockets connection wireless