Прием Broadcast сообщений

Discussion in 'PHP' started by n4n0bit, 22 Feb 2008.

  1. n4n0bit

    n4n0bit Elder - Старейшина

    Joined:
    11 Sep 2006
    Messages:
    52
    Likes Received:
    14
    Reputations:
    20
    Как организовать прием udp датаграм по средствам бродкаста?
     
    #1 n4n0bit, 22 Feb 2008
    Last edited: 22 Feb 2008
  2. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    наныч.. ты словарики к своим постам прикладывай.. )))
     
  3. n4n0bit

    n4n0bit Elder - Старейшина

    Joined:
    11 Sep 2006
    Messages:
    52
    Likes Received:
    14
    Reputations:
    20
    =) ну бля я хочу ethernet чат написать, типа как виндовый vypress, так вот я посылаю месадж на INADDR_BROADCAST с партом таким то и там мне черти ответить должны=)
    андарстэнд? ну может я плохо выразился в силу моих скромных знаниях об TCP/IP


    ps: я только что вышел из сетевога маркетинга - жуткое говно, поэтому буду знания подтягивать - компы это рулез=)
     
    #3 n4n0bit, 23 Feb 2008
    Last edited: 23 Feb 2008
  4. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Ip_onesbcast
     
  5. n4n0bit

    n4n0bit Elder - Старейшина

    Joined:
    11 Sep 2006
    Messages:
    52
    Likes Received:
    14
    Reputations:
    20
    Isis
    IP_ONESBCAST не имеет мой perl, да и в socket.h там нет. У стивенсана прочел что этот пораметр сокета который позволяет установить ядром широковещательный адрес равный 255.255.255.255, но я его и так устанавливаю.
     
  6. n4n0bit

    n4n0bit Elder - Старейшина

    Joined:
    11 Sep 2006
    Messages:
    52
    Likes Received:
    14
    Reputations:
    20
    Разобрался, все бонально просто, но есть еще пару вопросов.

    Этот скрипт рассылает пакеты - работает
    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Socket;
    $| = 1;
    # BroadCast messager
    # Default params
    my $PORT = 9191;
    my $ADDR = '10.17.23.255';
    
    socket(UDP, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or die "socket() failed: $@";
    setsockopt(UDP, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt() failed: $@";
    my $dest = sockaddr_in($PORT,inet_aton($ADDR));
    
    my $buff = undef;
    for(my $i = 1; $i <= 9; $i++) {
    	send(UDP, "NumPacket_$i", 0, $dest) or die "send() failed: $@";
    }
    
    Этот скрипт принимает бродкаст
    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    
    use IO::Socket::INET;
    $|++;
    
    print "Listening on UDP port: 9191\n";
    
    my $socket = IO::Socket::INET -> new (
        LocalPort  => 9191,
        Broadcast  =>  1,
        Proto      => 'udp',
        Blocking   => 1
        )
    or die "Failed to bind to socket: $@";
    
    my $mess; 
      
    while ($socket -> recv ($mess, 1024)) { print "Msg: $mess\n" }
    
    Этот скрипт должен принимать бродкаст но он этого не делает, чем он отличается 2 скрипта?

    Code:
    #!/usr/bin/perl
    use strict;
    use warnings;
    use Socket;
    
    # server
    
    socket(SOCK, PF_INET, SOCK_DGRAM, getprotobyname('udp')) or die "socket: $!";
    setsockopt(SOCK, SOL_SOCKET, SO_BROADCAST, 1) or die "setsockopt() failed: $@";
    bind(SOCK, sockaddr_in(9191, 10.17.23.32)) or die "bind: $!";
    my $hisaddr = recv(SOCK, my $buff, 1024, 0);
    print "[+] $hisaddr and say: $buff\n"; 
    
    еще поврос, вот в 1м скрипте адрес назначения упаковывается inet_aton() а если эту упаковку делать с udp сервером, то вылазит еррор, выходит что для udp это не надо - токуа вот почему так?

    Bad arg length for Socket::pack_sockaddr_in, length is 0, should be 4 at /usr/local/lib/perl5/5.8.8/mach/Socket.pm line 373.
     
Loading...
Similar Threads - Прием Broadcast сообщений
  1. GAiN
    Replies:
    3
    Views:
    7,739