0

This is my udp_broadcast server code where iam listening on 0.0.0.0

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

on client side iam broadcasting packet 255.255.255.255 so that i get a reply from server eventually and i endup in getting server ip address

udp_client_side code

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

on the server side iam getting error saying that

Exception java.net.BindException "Address already in use :cannot bind"

where am i going wrong if someone could help me it would be great Thanks in advance

ivan.sim
  • 8,972
  • 8
  • 47
  • 63
Suuhas Reddy
  • 1
  • 1
  • 1

2 Answers2

0

The address is already in use. You cannot bind your socket to that address. Some other process already has a UDP socket bound to that poet. Possibly a previous instance of your own program.

Don't broadcast to 255.255.255.255. It was deprecated twenty years ago. Use the subnet broadcast address, or better still use multicast.

user207421
  • 305,947
  • 44
  • 307
  • 483
0

You can bind your socket to that port, if this port is occupied by a previous instance of your own program. You need to use "reuse" parameter in all instances of your program. Call .setReuseAddress(true); before binding.