java - Android App 无法通过 Socket 连接到 Java Server

标签 java android sockets

我正在尝试创建一个简单的测试应用程序,它通过 Socket 连接到我的计算机(在本地主机中)。但是它抛出了一些异常,我不知道如何解决它。注意:我在手机中运行 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();
}
}

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

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

enter image description here

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

最佳答案

确保从模拟器设置为使用本地计算机时的 IP 是 10.0.2.2

当您同时使用手机和电脑时:

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

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

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

关于java - Android App 无法通过 Socket 连接到 Java Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35160176/

相关文章:

java - Netty ServerBootStrap 选项或 childOption 及其缓冲区大小对速度的影响

java - Spring 集成: How to read the unconsumed messages in the queue?

android - 激活 gps 提示 phonegap 应用程序

java - 如何在用户输入新行时添加项目符号

java - UDP 套接字编程(提取数据,将其存储在字符串中)

收听 unix 套接字时检查发件人

java - 声明静态 FileWriter 和 FileReader

java - eclipse /Java : easy way to consolidate classes source code without individual copy/paste?

android - 将 Android 调试器附加到使用我不拥有的 Eclipse 项目构建的进程

c - Netlink 套接字创建返回 NULL