繁体   English   中英

具有Android客户端的Linux服务器:连接超时

[英]Linux server with Android client: connection timed out

我正在开发一个与用Java编程的服务器连接的android应用程序。 当我在Windows上测试服务器应用程序时,服务器和客户端正在按照编程进行通信。

现在,我将实验移至Linux Ubuntu OS。 Android应用程序(客户端)能够发送字符串,但是当Linux上的服务器尝试向Android发送字符串时,它会失败。 它需要更长的时间并出现以下错误:

Testing.NewJFrame$1 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$1.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.access$300(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:706)
at java.awt.EventQueue$3.run(EventQueue.java:704)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.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...");

但是它停在“尝试连接......”这一行

这是客户端的代码:

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发送到基本上是我的桌面的服务器。 后者通过隔离网络连接以确保一定的安全级别。

抱歉迟到了,谢谢大家分享了他们的观点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM