例外:java.net.BindException:无法分配请求的地址

时间:2013-11-24 08:30:59

标签: java android

我想发送和接收数据报套接字,但我得到异常java.net.BindException: Cannot assign requested address。我通过了我想要通信的服务器的正确ipaddress并更正了端口号

try {
    SocketAddress sockaddr = new InetSocketAddress("203.100.77.54", 8000);
    DatagramSocket sock = new DatagramSocket(sockaddr);
    DatagramPacket pack = new DatagramPacket(bData, bData.length);
    sock.send(pack);
} catch (FileNotFoundException fnfe) {
    Log.e(LOG_TAG, "FileNotFoundException");
} catch (SocketException se) {
    Log.e(LOG_TAG, "SocketException");
} catch (UnknownHostException uhe) {
    Log.e(LOG_TAG, "UnknownHostException");
} catch (IOException ie) {
    Log.e(LOG_TAG, "IOException");
}

请帮帮我。

3 个答案:

答案 0 :(得分:2)

不会使用目标地址创建DatagramSockets。它们是使用自己的本地绑定地址创建的,或者没有,这在首次使用时会导致默认绑定。在构造DatagramPacket时,或在connect()方法中指定目标地址。

答案 1 :(得分:0)

试试这个

 String messageStr = "Hello Android!";
 int server_port = 8000;
 DatagramSocket s = new DatagramSocket();
 InetAddress local = InetAddress.getByName("203.100.77.54");
 int msg_length = messageStr.length();
 byte[] message = messageStr.getBytes();
 DatagramPacket p = new DatagramPacket(message, msg_length, local, server_port);
 s.send(p);

答案 2 :(得分:0)

这是一个更高级的答案:

直接UDP与直接TCP一样,是针对特定地址(例如Bob)的。因此,如果我将数据包发送给Bob,则不允许您监听它们-您只能监听自己。因此,如果您尝试打开Bob的侦听器,则设备会告知您不允许您访问。

除非您正在使用多播UDP或类似的协议,否则您只能收听本应直接发送给您的内容,因此IP或任何地址必须是设备自己的地址。