Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с отсылкой данных через UDP протокол  (Прочитано 7390 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Paul
Участник

ru
Offline Offline
Пол: Мужской

« : 05-04-2007 13:52 » 

В общем такая проблема: клиент соединяется с сервером, сервер получает от клиента сообщения, и потом отсылает ответ.

Для отправки ответа использую функцию send().
И выдаётся ошибка:
Код:
usage:$sock->send[BUF,[FLAGS,[TO]] at server.pl

Вот кусок кода:
Код:
#Соединяюсь
$sock=IO::Socket::INET->new(LocalPort=>$PORTNO, Proto=>'udp') or die "socket: $@";

#Жду сообщения
while ($sock->recv($newmsg, $MAXLEN))
{
   ....
   #Отсылаю данные
   $sock->send(@sendbuff);

}
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 05-04-2007 17:17 » new

Paul, метод send пакета IO::Socket является фронтэндом для встроенной ф-ии CORE::send - так в мане и написано. В описании CORE::send указано, что буфер - это скаляр.

Метод IO::Socket::send, судя по описанию, принимает переменное число параметров, а след. есть списковая ф-ия (без прототипа). Соотв., значения из массива образовали список скаляров: первое значение вместо BUF, второе вместо FLAGS, третье - TO, а остальные - лишние.

Это код метода из библиотеки perl-а.
Код: (Perl)
sub send {
    @_ >= 2 && @_ <= 4 or croak 'usage: $sock->send(BUF, [FLAGS, [TO]])';
    my $sock  = $_[0];
    my $flags = $_[2] || 0;
    my $peer  = $_[3] || $sock->peername;

    croak 'send: Cannot determine peer address'
         unless($peer);

    my $r = defined(getpeername($sock))
        ? send($sock, $_[1], $flags)
        : send($sock, $_[1], $flags, $peer);

    # remember who we send to, if it was successful
    ${*$sock}{'io_socket_peername'} = $peer
        if(@_ == 4 && defined $r);

    $r;
}
« Последнее редактирование: 05-04-2007 17:21 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines