Android App无法通过Socket与Java Server连接

时间:2016-02-02 17:36:42

标签: java android sockets

我正在尝试创建一个简单的测试应用程序,通过Socket连接到我的计算机(在localhost中)。但它提出了一些异常,我无法弄清楚如何解决它。注意:我在手机中运行apk(不是在模拟器中)

Java服务器代码

git push --prune ...
git prune ...

这就是 Andorid客户代码:

public class Main {

public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
Thread t = new Thread(){

    @Override
    public void run(){
        System.out.println("Server is running and listening ... ");
        try{
            ServerSocket ss = new ServerSocket(7000);
            while(true){
                Socket s = ss.accept();
                System.out.println("Connesso");
                DataInputStream dis = new DataInputStream(s.getInputStream());
                System.out.println("Received from Client: "+ dis.readUTF());
                dis.close();
                s.close();
            }
        }catch(IOException e){
            e.printStackTrace();
        }


    }
};
    t.start();
}
}

我得到了这个错误: enter image description here

我还尝试了其他一些端口,如1432或8000或8080,但结果是一样的 然后我尝试将IP从127.0.0.1更改为我自己的PC ip ..我得到的是这个错误..

enter image description here

编辑: 我尝试使用10.0.2.2作为IP在一个模拟器中运行应用程序并且一切都很好..我也尝试在另一个JAVA客户端程序中使用我的私有IP,它工作正常..所以问题只是我真实之间的连接手机和我的电脑(即使它们在同一个网络中)

3 个答案:

答案 0 :(得分:2)

确保设置为使用仿真器中的本地计算机时的IP为10.0.2.2

当您使用手机和PC时:

  • 如果您在同一个网络上,请确保您在网络上使用适当的IP作为服务器连接主机。我通常将我的物理机器设置为网络上的静态IP(通过我的路由器),所以我不必经常查看它们是什么,但这绝不是必需的。

  • 如果您的家庭网络使用手机,则必须使用您的ISP提供的IP进行连接,并确保在您设置的路由器中正确转发端口。

在任何一种情况下,您都需要确保防火墙允许您指定的端口上的传入连接。

答案 1 :(得分:0)

好的,我找到了解决方案。

然后我删除了我在防火墙中为端口7000做的异常,我创建了一个新的异常,允许使用端口3000进行连接,现在它可以正常工作。

答案 2 :(得分:0)

如果您尝试通过Android虚拟设备连接localhost侦听服务器,则必须首先检查AVD中的“移动数据”是否处于“开启”状态,因为如果它处于“开启状态”,它将不起作用关闭“状态,我不知道确切的原因,但它的确如此。