gpt4 book ai didi

java - ServerSocket代码适用于PC,不适用于Android

转载 作者:行者123 更新时间:2023-12-01 21:50:20 24 4
gpt4 key购买 nike

我有以下接受传入客户端的 ServerSocket 代码:

public class Network {

private Socket socket = null;
private ServerSocket serverSocket = null;
private OutputStream outputStream = null;
private BufferedReader reader = null;
private PrintWriter writer = null;
private boolean firstConnect = true;
private String packet;
private static Thread serverThread = null;

public Network() {
serverThread = new Thread(ServerThread());
serverThread.start();
}

private Runnable ServerThread() {

ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(1440);
} catch (Exception e) {
System.out.println("Error: " + e);
}
System.out.println("Listening for packets....");
try {
socket = serverSocket.accept();
} catch (Exception e) {
System.out.println("Error: " + e);
}
while (true) {
try {
socket = serverSocket.accept();
CommunicationThread commThread = new CommunicationThread(socket);
new Thread(commThread).start();
System.out.println("User connected: " + socket.getInetAddress());
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}


class CommunicationThread implements Runnable {
private Socket clientSocket;
private BufferedReader input;

public CommunicationThread(Socket clientSocket) {
this.clientSocket = clientSocket;
try {
this.input = new BufferedReader(new InputStreamReader(
this.clientSocket.getInputStream()));
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
public void run() {
while (!Thread.currentThread().isInterrupted()) {
try {
String read = input.readLine();
System.out.println(read);
} catch (Exception e) {
System.out.println("Error: " + e);
}
}
}
}
}

这段代码在 PC 上运行得非常好。然而,当在 Android 设备上运行时,它从不接受客户端。

我已经研究了以下潜在问题:

  • Linux 上的最小端口是 1024。我使用端口 1440;
  • 端口 1440 未被使用。服务器在 PC 上运行良好,但在 Android 上不行;
  • 问题不在于我的特定设备或 Android 操作系统。我使用过 Galaxy S4、Galaxy S6 和 Sony Z3 Compact,所有操作系统均从 Android 4.3 开始运行不同的操作系统版本;
  • 我在 AndroidManifest 中添加了“android.permission.INTERNET”;

为什么代码仍然无法在我的 Android 设备上运行?

最佳答案

在您的客户端代码中使用 192.168.171.18,这是您服务器的本地 IP。使用与服务器监听相同的端口。所以不要使用公共(public)IP。

关于java - ServerSocket代码适用于PC,不适用于Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298881/

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