【问题标题】:Cannot bind Address already in use无法绑定已在使用的地址
【发布时间】:2014-10-01 20:55:55
【问题描述】:

这是我正在监听 0.0.0.0 的 udp_broadcast 服务器代码

try{
  socket  = new DatagramSocket (7777,InetAddress.getByName("0.0.0.0"));
  socket.setBroadcast(true);

  while(true)
  {
    System.out.println(getClass().getName()+"ready recieve broadcast packets!");

    //recieve  a  packet

    byte[] recvBuf = new byte[15000];
    DatagramPacket packet =  new DatagramPacket(recvBuf,recvBuf.length);
    socket.receive(packet);
    System.out.println(getClass().getName() +"packet recieved from :" +packet.getAddress().getHostAddress());
    System.out.println("data is "+new String(packet.getData()));

    String message = new String(packet.getData()).trim();

    if(message.equals("p2p_project_node"))
    {
      byte [] senddata = "I_found_you_did_YOU".getBytes();
      DatagramPacket sendpacket= new DatagramPacket(senddata,senddata.length,packet.getAddress(),packet.getPort());
      socket.send(sendpacket);
      System.out.println("packet sent to "+sendpacket.getAddress().getHostAddress());
        }
    }
}

在客户端 iam 广播数据包 255.255.255.255 以便我从服务器获得回复 最终,我最终获得了服务器 IP 地址

udp_client_side 代码

try {           
    c = new DatagramSocket();
    c.setBroadcast(true);
    byte [] sendData = "p2p_project_node".getBytes();


    //this is broadcasting to 255.255.255.255a
    try{
        DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,InetAddress.getByName("255.255.255.255"),7777);
        c.send(sendPacket);
        System.out.println("rewuest sent to 255.255.255.255");
    }
    catch(Exception e) {
      System.out.println("exception 255.255" +e);
    }

在服务器端我收到错误提示

Exception java.net.BindException "地址已在使用中:无法绑定"

如果有人可以帮助我,我会在哪里出错,那就太好了提前谢谢

【问题讨论】:

    标签: java networking udp broadcasting


    【解决方案1】:

    地址已被使用。您不能将套接字绑定到该地址。其他一些进程已经有一个绑定到该诗人的 UDP 套接字。可能是您自己程序的先前实例。

    不要向 255.255.255.255 广播。二十年前它就被弃用了。使用子网广播地址,或者最好还是使用多播。

    【讨论】:

      【解决方案2】:

      如果此端口被您自己的程序的先前实例占用,您可以将您的套接字绑定到该端口。您需要在程序的 all 实例中使用“reuse”参数。绑定前调用.setReuseAddress(true);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-10
        • 2018-12-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-08
        相关资源
        最近更新 更多