in reply to UDP server/client Connection refused

By setting
LocalAddr => 'localhost',
on the $server_socket in the server code, you are limiting it to listening only on the local loopback address.

Delete that line, or set the LocalAddr to "0.0.0.0" , which allows binding to ANY available local IP address.

This will enable connections from outside the local 127.0.0.0 network to connect.

        "You're only given one little spark of madness. You mustn't lose it."         - Robin Williams

Replies are listed 'Best First'.
Re^2: UDP server/client Connection refused
by thanos1983 (Parson) on Sep 26, 2014 at 13:44 UTC

    Hello NetWallah,

    Thank you for your time and effort, reading and replying to my question.

    After some experimentation I finally understood that PeerAddr on the server side has to combined with the LocalPort, because is the server port locally and it will use this port for communication with the clients.

    The only part that I still can not understand is on the server side, it dose not really matters what king of modification I am applying on the LocalAddr => 'localhost', or LocalAddr => "0.0.0.0", still can not communicate locally. I was under the impression that local communication is different than external.

    Last question just in case you know about it. I found on IO::Socket::INET the following part of code:

    $sock = IO::Socket::INET->new( PeerPort => 9999, PeerAddr => inet_ntoa(INADDR_BROADCAST), Proto => udp, LocalAddr => 'localhost', Broadcast => 1 ) or die "Can't bind : $@\n";

    I was trying to understand the use of PeerAddr  => inet_ntoa(INADDR_BROADCAST),. I was looking online and I found 8.2 The IP address INADDR_BROADCAST where it explains:

    If there is a socket that is bound to the address assigned to the interface from which the packet was received, the packet will be delivered to this socket.

    I was under the impression that if there is a socket available on the server side, then it can be used for communication but so far I did not found a way to use it. But maybe I did not understand correctly.

    Any way thank you again for your time and effort.

    Seeking for Perl wisdom...on the process of learning...not there...yet!
      I believe you derived your code from http://www.thegeekstuff.com/2010/07/perl-tcp-udp-socket-programming/.

      I modified/simplified the code, and this set works fine for me:
      SERVER:

      #!/usr/bin/perl #udpserver.pl use strict; use warnings; use IO::Socket::INET; $| = 1; # flush after every write my $socket = new IO::Socket::INET ( LocalPort => '5000', Proto => 'udp', ) or die "ERROR in Socket Creation : $!\n"; while(1){ $socket->recv(my $recieved_data,1024); my $peer_address = $socket->peerhost(); my $peer_port = $socket->peerport(); print "\n($peer_address , $peer_port) said : $recieved_data"; #send the data to the client at which the read/write operations do +ne recently. $socket->send ("Server received '$recieved_data'. This is the SERV +ER response\n"); } $socket->close(); # We will never get here , but good practice to clos +e
      CLIENT:
      #!/usr/bin/perl #udpclient.pl use strict; use warnings; use IO::Socket::INET; $| = 1; # flush after every write my $socket = new IO::Socket::INET ( PeerAddr => '127.0.0.1:5000', Proto => 'udp' ) or die "ERROR in Socket Creation : $!\n"; $socket->send("data from client"); $socket->recv(my $data,1024); print "Data received from socket : $data\n"; $socket->close();
      The BROADCAST is a way to send data to all listeners on the subnet. To do that, you use a special broadcast IP addressto SEND data.

      I'm not sure I understood your question in this regard.

              "You're only given one little spark of madness. You mustn't lose it."         - Robin Williams

        Hello again NetWallah,

        That is true I derived the code from this website, just to create a sample of test code. I am working with a bigger part of code SNTP Client/Server V2 RFC. I am still looking for ways of improving it, and I was looking for your answer. How to specify the PeerAddr and LocalPort so I can make it connect with my public IP not only with my local.

        I think I understood what you said about:

        The BROADCAST is a way to send data to all listeners on the subnet. To do that, you use a special broadcast IP addressto SEND data.

        More or less this an answer that covers my question. I was not able to figure out why and how we could use PeerAddr  => inet_ntoa(INADDR_BROADCAST) but thanks to you I have an idea now.

        Again thank you for your time and effort, you helped me a lot with my problem.

        Seeking for Perl wisdom...on the process of learning...not there...yet!