Android Java Server Socket无法连接

时间:2014-04-17 09:10:34

标签: java android sockets networking

我正在编写一个需要从服务器接收字符串的应用程序。如果连接的IP地址是" 127.0.0.1"以下代码有效; (客户端和服务器在同一部手机上,仅用于测试目的),但如果它是真实的"手机的IP地址。

服务器:

ServerSocket echoServer = null;
        String line;
        DataInputStream is;
        PrintStream os;
        Socket clientSocket = null;

        // Try to open a server socket on port 9999
        try {
            echoServer = new ServerSocket(1109);
        } catch (IOException e) {
            System.out.println(e);
        }
        // Create a socket object from the ServerSocket to listen and
        // accept
        // connections.
        // Open input and output streams

        try {
            clientSocket = echoServer.accept();
            is = new DataInputStream(clientSocket.getInputStream());
            os = new PrintStream(clientSocket.getOutputStream());

            // As long as we receive data, echo that data back to the
            // client.

                os.println("Das ist ein Test immernoch");
                publish("Fertig");
        } catch (IOException e) {
            publish("Fertig");
        } catch (Exception e) {
            publish("Fertig");
        }

客户端:

Socket smtpSocket = null;
    DataOutputStream os = null;
    DataInputStream is = null;

    try {
        smtpSocket = new Socket();
        smtpSocket.connect(new InetSocketAddress("46.114.153.58", 1109), 10000); //That is the critcal line, if the IP is "127.0.0.1" everything works perfectly fine
        os = new DataOutputStream(smtpSocket.getOutputStream());
        is = new DataInputStream(smtpSocket.getInputStream());
    } catch (UnknownHostException e) {
        return "Fehler";
    } catch (IOException e) {
        return "Fehler";
    }

    if (smtpSocket != null && os != null && is != null) {
        try {

            os.writeBytes("HELO\n");
            String s = is.readLine();
            os.close();
            is.close();
            smtpSocket.close();
            return s;
        } catch (UnknownHostException e) {
            //System.err.println("Trying to connect to unknown host: " + e);
        } catch (IOException e) {
            //System.err.println("IOException:  " + e);
        }
    }
    return "Fehler";
}

编辑:因此这是一个移动设备的应用程序,没有我可以配置的路由器。

3 个答案:

答案 0 :(得分:1)

将此添加到您的代码中

if (Build.VERSION.SDK_INT >= 9) {  
                StrictMode.ThreadPolicy policy = new   StrictMode.ThreadPolicy.Builder()
                        .permitAll().build();
                StrictMode.setThreadPolicy(policy);

            }

答案 1 :(得分:0)

如果您计划将ServerSocket与外部连接一起使用,则可能必须转发您在路由器上使用的端口。

答案 2 :(得分:0)

如果这是您的路由器的IP地址,并且您通过wifi将Android移动设备连接到路由器,那么您必须将路由器中的端口1109移植到您的移动设备。

如果这是您通过数据连接连接的Android移动设备的IP地址,那么您的数据提供商阻止端口的安全性将受到一些限制。

46.114.153.58这是一个静态IP地址还是动态的?

如果是动态IP地址,首先通过ping它来检查ip地址的可用性。