我正在尝试创建一个简单的测试应用程序,通过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();
}
}
我还尝试了其他一些端口,如1432或8000或8080,但结果是一样的 然后我尝试将IP从127.0.0.1更改为我自己的PC ip ..我得到的是这个错误..
编辑: 我尝试使用10.0.2.2作为IP在一个模拟器中运行应用程序并且一切都很好..我也尝试在另一个JAVA客户端程序中使用我的私有IP,它工作正常..所以问题只是我真实之间的连接手机和我的电脑(即使它们在同一个网络中)
答案 0 :(得分:2)
确保设置为使用仿真器中的本地计算机时的IP为10.0.2.2
当您使用手机和PC时:
如果您在同一个网络上,请确保您在网络上使用适当的IP作为服务器连接主机。我通常将我的物理机器设置为网络上的静态IP(通过我的路由器),所以我不必经常查看它们是什么,但这绝不是必需的。
如果您的家庭网络使用手机,则必须使用您的ISP提供的IP进行连接,并确保在您设置的路由器中正确转发端口。
在任何一种情况下,您都需要确保防火墙允许您指定的端口上的传入连接。
答案 1 :(得分:0)
好的,我找到了解决方案。
然后我删除了我在防火墙中为端口7000做的异常,我创建了一个新的异常,允许使用端口3000进行连接,现在它可以正常工作。
答案 2 :(得分:0)
如果您尝试通过Android虚拟设备连接localhost侦听服务器,则必须首先检查AVD中的“移动数据”是否处于“开启”状态,因为如果它处于“开启状态”,它将不起作用关闭“状态,我不知道确切的原因,但它的确如此。