Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
异常:java.net.BindException:无法分配请求的地址_Java_Android - Fatal编程技术网

异常:java.net.BindException:无法分配请求的地址

异常:java.net.BindException:无法分配请求的地址,java,android,Java,Android,我想发送和接收数据报套接字,但得到异常java.net.BindException:无法分配请求的地址。我传递了要通信的服务器的正确IP地址和正确的端口号 try { SocketAddress sockaddr = new InetSocketAddress("203.100.77.54", 8000); DatagramSocket sock = new DatagramSocket(sockaddr); DatagramPacket pack = new Datag

我想发送和接收数据报套接字,但得到异常
java.net.BindException:无法分配请求的地址
。我传递了要通信的服务器的正确IP地址和正确的端口号

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");
}
请帮帮我。

像这样试试

 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);

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

下面是一个更高级的答案:

直接UDP和直接TCP一样,是针对特定地址的,比如Bob。因此,如果我将数据包发送给鲍勃,那么你就不允许听它们——你只能自己听。因此,如果您试图为Bob打开一个侦听器,您的设备会告诉您,您不被允许


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

为什么?我写的哪部分你不明白?试试看为什么?单纯的代码不是答案。你必须解释。