在Android中建立Java服务器和客户端之间的连接appEDIT
我在android中创建了一个android应用程序和一个Java服务器。在Android中建立Java服务器和客户端之间的连接appEDIT
但我遇到了以下问题:我的客户端(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();
}
}
}
}
}
这里是:私人字符串serverIpAddress = “10.0.2.2” !!!!!
你想在Android上运行服务器部分?我想不是,在这种情况下,使用环回地址并不会真正起作用,因为Android系统上的环回接口会循环回到Android机器本身,因此不会路由到外部。
他可能在模拟器上运行它,这就是为什么它在同一台机器上连接。 – 2011-05-18 13:31:39
这也不起作用 - 仿真器模拟完整的系统,具有自己的内核,TCP堆栈和回送接口。 – 2011-05-18 13:34:14
好....我用我的客户端的回环android地址...问题是我应该用什么服务器是在Java? – stoycely 2011-05-18 13:35:14
对于serverAddr,使用#InetSocketAddress(int port)
构造函数,它指定通配符地址和特定的端口,这意味着它监听机器的所有接口。
编辑:为了获得最佳效果,在android设备上使用服务器的DNS名称来连接它。
从http://developer.android.com/guide/developing/devices/emulator.html#emulatornetworking:如果要在模拟器内与本地主机通信,请在本地主机上使用IP 127.0.0.1
,并在Android中使用IP 10.0.2.2
。这应该让你在Android客户端和本地主机服务器之间进行通信。
你的意思是localhost? 127.0.0.1? – 2011-05-18 13:29:06
我不知道这是我应该使用什么? – stoycely 2011-05-18 13:30:47
好吧,它看起来像混乱增长:)你介意给我们显示你在客户端连接的确切代码吗?你的意思是“android环回地址”究竟是什么意思? – 2011-05-18 13:37:41