我想发送和接收数据报套接字,但我得到异常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");
}
请帮帮我。
答案 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或任何地址必须是设备自己的地址。