我是新来的Android和Java都让我请你原谅,如果我的问题 被要求在不恰当的组或论坛。我做了一个净 申请我公司,最近他们要求我将它移植上 的Android以便在三星Galaxy标签安装。首先,我使用Eclipse,JDK 6,目标平台android 2.2 以及带有GalaxyTab插件的模拟器。我的操作系统是Windows 7.DatagramSocket.bind();套接字异常:无法分配请求的地址。 Android模拟器
本申请,发送和接收消息,并且从某种 控制器使用UDP在网络上。 简而言之,我的应用程序使用“DatagramSocket”,将其绑定到本地 “InetSocketAddress”,然后启动线程来侦听 数据报,而另一个线程根据用户请求向控制器发送请求。下面是一些代码片段:
这是我给你的本地地址和插座:
try {
loc_addr = new InetSocketAddress(
Inet4Address.getByAddress(
new byte[]{(byte) 192,(byte) 168,1,(byte)240}), 0xBAC0);
//192.168.1.240 is the IP of my machine on the network
} catch (UnknownHostException e) {
.......
}
try {
soc = new DatagramSocket();
soc.setReuseAddress(true);
soc.setBroadcast(true);
soc.bind(loc_addr);
} catch (SocketException e) {
.......
}
这是我听传入的数据报:
try{
buf = new byte[1024];
receive_pac = new DatagramPacket(buf, 1024);
soc.receive(receive_pac);
if (receive_pac.getData() != null){
.......
}
}
这是我发送数据:
try {
addr = (Inet4Address) Inet4Address.getByAddress (new byte[]
{(byte) 192,(byte) 168,1,(byte) 255}); //The message I am sending should be broadcasted
} catch (UnknownHostException e) {
......
}
sendPacket = new DatagramPacket(buf, buf.length, addr,
loc_addr.getPort());
try {
soc.send(sendPacket);
} catch (IOException e) {
......
}
那么当我使用“soc.bind(...)”我收到以下异常: 不能分配请求的地址
然后我收到一个调试消息(我不知道这是否是相关的):
DEBUG/SntpClient(58): request time failed: java.net.SocketException: Address family not supported by protocol
该应用程序的工作,我通过“Wireshark的”,当我 请核实从仿真器将数据发送到控制器,该控制器 回复回来了正确的预期数据。然而, 插座,在应用程序中,在模拟器上没有收到任何东西,并保持阻塞 “接收”呼!
谁能帮我找出问题或错误我与我的应用程序的接收部分承诺!
任何帮助是非常赞赏,
谢谢你杰夫的帮助,并为您的信息。 我搜索了一下,发现链接上有一些代码:http://www.droidnova.com/get-the-ip-address-of-your-device,304.html,它允许我找到模拟器的IP正如你所说的,与我的电脑的IP非常不同。 我试着将它绑定到套接字,并导致“SocketException:无效的参数”。该程序仍然提供相同的操作!你有什么想法这个例外可能意味着什么? – TMI 2011-03-05 08:25:22
@TMI不太确定这次可能是什么。但它看起来像你[不是唯一一个有这个问题](http://stackoverflow.com/questions/4163375/debug-sntpclient60-request-time-failed-java-net-socketexception-address-fami) – Jeff 2011-03-06 07:44:51