gpt4 book ai didi

android - DatagramSocket.bind();套接字异常 : cannot assign requested address. Android 模拟器

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:17 25 4
gpt4 key购买 nike

我是 Android 和 Java 的新手,所以请原谅我的问题在不适当的组或论坛上被问到。我做了一个.Net为我的公司申请,最近他们要求我将其移植到Android 以便在 Samsung Galaxy Tabs 上安装它。

首先,我使用的是Eclipse,JDK 6,目标平台android 2.2和带有 GalaxyTab 插件的模拟器。我的操作系统是 Windows 7。

这个应用程序,向某个特定的对象发送消息和从某个特定的对象接收消息使用 UDP 的网络上的 Controller 。简而言之,我的应用程序使用“DatagramSocket”,将其绑定(bind)到本地“InetSocketAddress”然后启动一个线程来监听数据报,而另一个线程向 Controller 发送请求用户的请求。这是一些代码 fragment :

这是我分配本地地址和套接字的地方:

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”验证了当我要求模拟器将数据发送到 Controller , Controller 正确回复预期数据。然而套接字,在应用程序中,在模拟器上没有收到任何东西并保持阻塞状态“接收”电话!

谁能帮我弄清楚我在申请的接收部分遇到了什么问题或错误!

非常感谢任何帮助,

最佳答案

TMI,

[已编辑:如果您看到我的其他答案,请无视,我犯了一个经典错误,即在一次测试中更改了两个变量,而造成差异的是另一个变量。]

关于这个:

I tried binding it to the socket and it resulted with the "SocketException: Invalid Argument". Still the program delivered the same operation! Do you have any idea what this exception might mean?

你现在可能已经解决了这个问题,但我也有同样的问题并自己回答了here .

对我来说摆脱这个异常的是改变我创建 DatagramSocket 的方式。

来自:

sock = new DatagramSocket();

收件人:

DatagramChannel channel = DatagramChannel.open();
DatagramSocket socket = channel.socket();

关于android - DatagramSocket.bind();套接字异常 : cannot assign requested address. Android 模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5167586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com