Linux 服务器与 Android 客户端:连接超时

Linux server with Android client: connection timed out

我正在开发一个 android 应用程序,该应用程序连接到在 Java 中编程的服务器。当我在 Windows.

上测试服务器应用程序时,服务器和客户端正在按照编程进行通信

现在我把实验移到了LinuxUbuntuOS。 Android 应用程序(客户端)能够发送字符串,但是当 Linux 上的服务器尝试将字符串发送到 android 时失败。它需要更长的时间并给出此错误:

Testing.NewJFrame run
SEVERE: null
java.net.ConnectException: Connection timed out
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at java.net.Socket.connect(Socket.java:528)
at java.net.Socket.<init>(Socket.java:425)
at java.net.Socket.<init>(Socket.java:208)
at Testing.NewJFrame.run(NewJFrame.java:178)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:312)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:745)
at java.awt.EventQueue.access0(EventQueue.java:103)
at java.awt.EventQueue.run(EventQueue.java:706)
at java.awt.EventQueue.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:715)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

这是服务器端的代码:

Socket clientSocket = null;
ServerSocket serverSocket = null;
String clientIP;
int port = 4447;

并且根据某些条件将触发以下内容:

System.out.println("Attempting connect to "+clientIP+" through "+ port);
Socket socket = new Socket(clientIP, port);
System.out.println("Connection made");
OutputStream output = socket.getOutputStream();
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(output)), true);
out.println(appName + " has been installed and launched in Background");
System.out.println("Message sent...");

但它停在 "Attempting to connect......"

客户端代码如下:

public void listenToServer(){
    new Thread (new Runnable(){
        @Override
        public void run() {
            try {
                serverSocket = new ServerSocket(4447);
            } catch (IOException e) {
                e.printStackTrace();
            }
            while (true) {
                try {
                    client = serverSocket.accept();
                    Scanner in = new Scanner(client.getInputStream());
.
.
.
.
.

请注意,这两个代码在 Windows 中都可以正常工作,但在 Linux Ubuntu!

中不起作用

我想分享我几周前找到的答案,以防有人感兴趣。

我发现问题中的错误背后的原因是我正在使用的网络配置。我在大学的办公室工作,并通过允许这种 p2p 通信将消息发送到本地计算机而不是相反的方式来应用某种程度的安全性。所以我可以从 android 向基本上是我的桌面的服务器发送消息。后者通过隔离网络连接,以确保一定的安全级别。

抱歉回来晚了,感谢分享观点的各位