我在android中有一个应用程序,我在其中创建了一个Android客户端和一个Java服务器。
但是我遇到了以下问题:我的客户端(android部分)使用android环回地址连接到端口6000上的本地机器。
我的服务器(使用Java)在端口6000上侦听本地计算机 - 但是我必须使用什么IP来获取接受客户端的套接字?
InetSocketAddress serverAddr = new InetSocketAddress(SERVERIP,serverPort);
serverSocket = new ServerSocket();
serverSocket.bind(serverAddr);
那么我必须使用什么SERVERIP?
更新:我的客户端在模拟器上运行!!!!!
编辑:
公共类ClientThread实现Runnable { 对象syncToken;
public ClientThread(Object syncToken) {
this.syncToken = syncToken;
}
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
socket = new Socket(serverAddr, 50458);
} catch (UnknownHostException e) {
System.err.println("Don't know about host");
} catch (IOException e) {
System.err
.println("Couldn't get I/O for the connection to host");
}
try {
out = new PrintStream(socket.getOutputStream());
} catch (IOException e) {
System.out.println(e);
}
while (true) {
synchronized (syncToken) {
try {
syncToken.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
这是:private String serverIpAddress =“10.0.2.2”; !!!!!
答案 0 :(得分:2)
来自http://developer.android.com/guide/developing/devices/emulator.html#emulatornetworking:如果您想要在模拟器中与本地主机进行通信,请在本地主机上使用IP 127.0.0.1
,并在Android中使用IP 10.0.2.2
。这应该允许您在Android客户端和本地主机服务器之间进行通信。
答案 1 :(得分:0)
您想在Android上运行服务器部分吗?我猜不是,在这种情况下使用环回地址并不真正起作用,因为Android系统上的环回接口会循环回到Android机器本身,它不会路由到外部。
答案 2 :(得分:0)
对于serverAddr,使用#InetSocketAddress(int port)
构造函数,它指定通配符地址和特定端口,这意味着它会侦听机器的所有接口。
编辑:为获得最佳效果,请在Android设备上使用服务器的DNS名称连接到它。