我是新來的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