The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
UDP Socket, !*! Alexious, 27-Апр-07, 14:38  [смотреть все]
Написал простой сокет для UDP пакетов. Под виндой все отлично работает

use strict;
use IO::Socket;
my($sock, $oldmsg, $newmsg, $hisaddr, $hishost, $MAXLEN, $PORTNO);
$MAXLEN = 1024;
$PORTNO = 137;
$sock= IO::Socket::INET->new(LocalPort=>$PORTNO, Proto=>'udp') or die "socket: $@";
while ($sock->recv($newmsg, $MAXLEN))
{
print $newmsg;
}

Пытаюсь запустить по UNIX но получаю ишибку всегда :

socket: IO::Socket::INET: Bad protocol 'udp' at UDP_recv2.pl line 9.

В чем дело?
-----------------------------------
Так же есть сервер

use Socket;
socket(SockHandle, PF_INET, SOCK_DGRAM, getprotobyname("udp"));
$HOSTNAME="tratata";
$ipaddr="175.37.10.50";
$PORTNO="137";
$MSG="HELP-HELP-HELP-HELP";
$ipaddr=inet_aton($HOSTNAME);
$portaddr=sockaddr_in($PORTNO, $ipaddr);
while (1) {
print "Send\n";
send(SockHandle,$MSG,0, $portaddr)==length($MSG)";
sleep 5;}

Программа вроде работает по UNIX но ничего не шлет в сеть. Подскажите где ошибки плиз.

  • UDP Socket, !*! NuINu, 16:37 , 27-Апр-07 (1)
    >Написал простой сокет для UDP пакетов. Под виндой все отлично работает
    Не знаю почему у тебя не запускается. Может ты модуль не правильно установил? IO::Socket
    ?
    У меня работает, только вывод не печатает,
    наверное буфферизирует.
    но если поставить:
    print "msg:$newmsg\n";
    все выводит.

    Сервер тоже рабочий, только
    send(SockHandle,$MSG,0, $portaddr)==length($MSG)";
    не правильная лучше так
    send(SockHandle,$MSG,0, $portaddr) or die("Send failed\n");

    Да, я тестировал не под суперюзером и порт назначил 1370. может у тебя из за этого бага?

    • UDP Socket, !*! Alexious, 16:42 , 27-Апр-07 (2)
      Модуль не устанавливал. Использую стандартный. По прежнему при попытке компиляции приемника возникает ошибка socket: IO::Socket::INET: Bad protocol 'udp' . Причем если протокол поменять на tcp то все равно ошибка. Хренотень какая-то.
      • UDP Socket, !*! vic, 17:11 , 27-Апр-07 (3)
        >Модуль не устанавливал. Использую стандартный. По прежнему при попытке компиляции приемника возникает
        >ошибка socket: IO::Socket::INET: Bad protocol 'udp' . Причем если протокол поменять
        >на tcp то все равно ошибка. Хренотень какая-то.

        каким пользователем работаешь?
        если не рутом то тебе не разрешено открывать порты < 1024.

        • UDP Socket, !*! Alexious, 17:21 , 27-Апр-07 (4)
          нет не рутом, попробовал 1370, результат тот же
          • UDP Socket, !*! Homewrecker, 22:54 , 27-Апр-07 (5)
            Весьма странная ошибка.
            Что пишет cat /etc/protocols | grep -i udp ?
            • UDP Socket, !*! Homewrecker, 22:56 , 27-Апр-07 (6)
              >Весьма странная ошибка.
              >Что пишет cat /etc/protocols | grep -i udp ?


              Да, и права на него проверьте

              • UDP Socket, !*! Alexious, 10:17 , 28-Апр-07 (8)
                >>Весьма странная ошибка.
                >>Что пишет cat /etc/protocols | grep -i udp ?
                >
                >
                >Да, и права на него проверьте
                Да, вот с правами помоему засада. Кажись дело все в них. Будем думать. Спасибо!!!

            • UDP Socket, !*! Alexious, 10:16 , 28-Апр-07 (7)
              >Весьма странная ошибка.
              >Что пишет cat /etc/protocols | grep -i udp ?

              >cat /etc/protocols | grep -i udp
              udp             17      UDP             # user datagram protocol

              • UDP Socket, !*! NuINu, 14:34 , 28-Апр-07 (9)
                >>Весьма странная ошибка.
                >>Что пишет cat /etc/protocols | grep -i udp ?
                >
                >>cat /etc/protocols | grep -i udp
                >udp            
                > 17      UDP    
                >         # user
                >datagram protocol
                короче смотрим:
                INET.pm
                ищем: Bad protocol
                видим после:
                   if(@proto = getprotobyname($proto)) {
                      $proto = $proto[2] || undef;
                    }
                    else {
                      $@ = "Bad protocol '$proto'";
                      return;
                    }

                тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет?
                тестируем на перле и на си. библиотека libc ее перл динамически подгружает.
                а дальше к ядру :)

                • UDP Socket, !*! Homewrecker, 15:48 , 28-Апр-07 (10)

                  >тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет?

                  getprotobyname всего-лишь смотрит в /etc/protocols

                  • UDP Socket, !*! Alexious, 15:58 , 28-Апр-07 (11)
                    >
                    >>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет?
                    >
                    >getprotobyname всего-лишь смотрит в /etc/protocols

                    СПАСИБО ВСЕМ. ВЕ ДЕЛО БЫЛО В ПРАВАХ. ТЕПЕРЬ РАБОТАЕТ

                    • UDP Socket, !*! NuINu, 16:39 , 28-Апр-07 (12)
                      >>
                      >>>тестируем: getprotobyname с разными параметрами, может у тебя udp вообще нет?
                      >>
                      >>getprotobyname всего-лишь смотрит в /etc/protocols
                      >
                      >СПАСИБО ВСЕМ. ВЕ ДЕЛО БЫЛО В ПРАВАХ. ТЕПЕРЬ РАБОТАЕТ
                      :-)





Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру