我有一个用C#编写的Windows服务器应用程序。我有一个Android的客户端应用程序。我想在无限循环中从客户端连续发送数据到服务器。数据正在发送但有时会出现延迟。我真的坚持了下来。这是我的客户端代码:
new Thread(new Runnable() {
public void run() {
Socket socket = null;
PrintWriter out = null;
while(true) {
try {
socket = new Socket(IP, PORT);
out = new PrintWriter(socket.getOutputStream(), true);
out.println(msg);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
知道为什么会有延迟?
答案 0 :(得分:2)
您的问题是您在while循环的每次迭代中初始化套接字。
new Thread(new Runnable() {
public void run() {
Socket socket = null;
PrintWriter out = null;
while(true) {
try {
socket = new Socket(IP, PORT);
out = new PrintWriter(socket.getOutputStream(), true);
out.println(msg);
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
将其重构为循环,如下所示:
new Thread(new Runnable() {
public void run() {
Socket socket = new Socket(IP, PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
while(true) {
try {
out.println(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
socket.close();
}
}).start();
除非是设计,在这种情况下,为什么?
答案 1 :(得分:0)
似乎代码是正确的。滞后不仅可能由应用程序引起,还可能由网络状态引起。
尝试从两个设备ping路由器,看看是否由于无线连接而出现滞后尖峰。如果您看到ping中存在高延迟,则问题出在连接中,而不是应用程序中。