Android Serversocket似乎不接受仿真器上的连接

时间:2013-03-08 08:18:09

标签: android sockets client

我一直在尝试在两个Android模拟器之间实现简单的套接字通信,但似乎无法获得它。

我的服务器:

public void run() {     
    if (SERVERIP != null) {
        try {
            serverStatus.setText("My IP: " + SERVERIP);
            serverSocket = new ServerSocket(6798);
            serverStatus.setText("ServerSocket Created");
        }
        catch(Exception e) {
            e.printStackTrace();
        }

        try {
            while (true) {   
                serverStatus.setText("waiting for client");
                Socket client = serverSocket.accept();
                serverStatus.setText("Connected.");
                BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
                String line = in.readLine();

                serverStatus.setText(line);
                in.close();
                client.close();
            }
        }
        catch(Exception e) {
            e.printStackTrace();
        }
    }
    else
        serverStatus.setText("Couldn't detect internet connection.");
}

我的客户:

try {
    InetAddress ina = InetAddress.getByName("10.0.2.2");
    socket = new Socket(ina, 6789); 
}
catch (Exception e) {
    e.printStackTrace();
}

try {
    PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())), true);
    out.println("Hey Server!");
    dispText.setText("sent");
}
catch (Exception e) {
    e.printStackTrace();
}

客户端继续显示“已发送”消息,但服务器不会超出“等待客户端”(卡在阻塞accept()上)。 我在我的Windows机器上使用telnet将端口6789重定向到服务器模拟器控制台上的6798。我也试过关闭我的防火墙,并在此处提出类似问题上发布的其他建议。请帮助,因为似乎无法得到它,并觉得我犯了一个非常愚蠢的错误。

此外,任何人都可以告诉我,如果服务器仍然停留在accept(),客户端如何超越套接字创建代码行。或者,只要在端口上侦听服务器,服务器没有响应对客户端无关紧要吗?

1 个答案:

答案 0 :(得分:0)

Android模拟器按设计放置在虚拟防火墙/路由器后面,即使它们位于同一网络上,也无法看到对方。模拟器上Google“doc”的“Using Network Redirection”以及“Interconnecting Emulator Instances”部分解释了如何与模拟器实例进行通信。

至于你的上一个问题。对socket应用空构造函数,然后使用connect call with a specified timeout