繁体   English   中英

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

[英]Android App can't connect with Java Server via Socket

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

Java服务器代码

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();
}
}

这是Andorid客户代码:

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
 Button sendBTN;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    sendBTN=(Button)findViewById(R.id.button);
    sendBTN.setOnClickListener(this);
}

@Override
public void onClick(View v) {
  Thread t = new Thread(){
      @Override
      public void run(){
          try {
              System.out.println("Starting Connection");
              Socket s = new Socket("127.0.0.1", 7000);
              System.out.println("Connection DONE");
              DataOutputStream dos = new DataOutputStream(s.getOutputStream());
              dos.writeUTF("Let's Test The Socket");
              dos.flush();
              dos.close();
              s.close();
              System.out.println("Closing socket");
          } catch (UnknownHostException e){
              System.out.println("There was an Unknown Erorr:");
              e.printStackTrace();
          } catch (IOException e) {
              System.out.println("There was an IOException:");
              e.printStackTrace();
          }
      }
  };
    t.start();
    Toast.makeText(this, "Messagge Sent...", Toast.LENGTH_SHORT).show();
}
}

我得到这个错误是什么: 在此处输入图片说明

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

在此处输入图片说明

编辑:我试图在使用10.0.2.2作为IP的模拟器中运行该应用程序,并且一切正常。.我也尝试在另一个JAVA客户端程序中使用我的Private Ip,它工作正常。.因此,问题只是连接之间我的真实电话和PC(即使它们在同一网络中)

当设置为从仿真器使用本地计算机时,请确保IP为10.0.2.2

当您使用手机和PC时:

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

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

无论哪种情况,都需要确保防火墙允许您指定的端口上的传入连接。

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

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

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

暂无
暂无

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

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