gpt4 book ai didi

java - Android Java TCP/IP 服务器服务

转载 作者:行者123 更新时间:2023-12-02 10:25:28 25 4
gpt4 key购买 nike

我无法将 TCP/IP 服务器添加到服务中,关闭(最小化)应用程序时,服务器不接受数据。如何让数据持续传输?

public int onStartCommand(Intent intent, int flags, int startId) {
myServer = new Server();
myServer.start();
return Service.START_STICKY;
}

服务器

 private class Server extends Thread {
private Socket clientSocket;
private ServerSocket server;
private BufferedReader in;
private BufferedWriter out;
private String LOG_TAG;

@Override
public void run() {
while (true) {
try {
server = new ServerSocket(9002);
clientSocket = server.accept();
try {
try {
in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
String word = in.readLine();
Log.d(LOG_TAG, "***" + word + "***");
out.write(word);
out.flush();
} finally {
System.out.println("run closed");
clientSocket.close();
in.close();
out.close();
}
} finally {
System.out.println("Server closed");
server.close();
}
} catch (IOException e) {
System.err.println(e);
}
}
}
}

最佳答案

这段代码有很多问题。以下是其中的列表:

  • 您需要成为前台服务,否则 Android 最终会终止您的服务。
  • 您正在创建一个服务器套接字并接受与其的单个连接,然后在循环中创建另一个连接。你不是这样做的。您创建一次服务器套接字,并为每个传入连接接受()
  • 由于上述原因,第二次总是会失败,因为除非您使用设置了 SO_REUSEADDR 的套接字,否则端口不会立即可用。请参阅 ServerSocket 上的 setReuseAddress 调用
  • 您正在盲目地捕获所有异常。我高度怀疑您抛出异常并忽略它,导致一切都不起作用
  • 此代码不适用于任何蜂窝网络,因为您和世界之间将设置 NAT。
  • 即使使用 WiFi,您也需要确保您的网络允许传入连接到您的设备。大多数家庭路由器的默认设置不是。

关于java - Android Java TCP/IP 服务器服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53984391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com