gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 20:09:52 28 4
gpt4 key购买 nike

我正在尝试创建一个简单的测试应用程序,它通过 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com