异常: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或任何地址必须是设备自己的地址。为什么?我写的哪部分你不明白?试试看为什么?单纯的代码不是答案。你必须解释。