Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сокет-сервер 
:(
    Опции темы
Sap1enS
Дата 11.12.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.10.2007
Где: Омск

Репутация: нет
Всего: нет



Пробовал сделать сокет-сервер на Перле, клиент на Flash.
Исходники взяты отсюда

Проблема вот в чем. На локале (винда) пишу в командной строке "perl chat_daemon.pl", затем сворачиваю - чат работает прекрасно.

Гружу это дело на сервер - не хочет соединяться. Хотя в логах сначала писал, что сервер запускается.

Пытаюсь запускать его через cron, ставил разные интервалы.
Возможно есть другой способ создать демон?

Просьба советы снабжать примерами ;)
PM MAIL ICQ   Вверх
nitr
Дата 11.12.2007, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Sap1enS, а сервер где? код в студию.
Раз он работает на вашем ПК, и не работает только на сервере, то в коде дело...


--------------------
PM   Вверх
nitr
Дата 11.12.2007, 20:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



увидел код, на том же ресурсе...

Добавлено через 4 минуты и 29 секунд
проверьте порт выше 30000.

Добавлено через 9 минут и 45 секунд
даже не знаю, на моём сервере всё запустилось. Похоже надо или порт заменить, или у вас на сервере нет доступа к каким-то ресурсам...
Код

#!/usr/bin/perl
use POSIX ();
use Socket;
use strict;
use warnings;

my $DaemonPort = 1024;
my $work = 1;
$|=1;

my $sock_name = sockaddr_in($DaemonPort, INADDR_ANY)    
        or die "Couldn't convert into an Internet address: $!\n";
socket(SERVER, PF_INET, SOCK_STREAM, getprotobyname('tcp'))
        or die "Couldn't create socket: $!\n";
setsockopt(SERVER, SOL_SOCKET, SO_REUSEADDR, 1)
        or die "setsockopt() failed: $!\n";
bind(SERVER, $sock_name)
        or die "Couldn't bind to port $DaemonPort: $!\n";
listen(SERVER, SOMAXCONN);
$SIG{PIPE} = 'IGNORE';

_log("Server started...");

    my $rem_addr = accept(CLIENT,SERVER);
    next unless (defined $rem_addr);
    
    my($port,$iaddr) = sockaddr_in($rem_addr);
    my $IP = inet_ntoa($iaddr);
    _log("Connection from $IP:$port");

    my ($byte, $line);
    while ($work and sysread(CLIENT, $byte, 1) == 1) {
        if (ord($byte) == 0) { goCommand($line) }
        else { $line .= $byte }
    }

    sleep(3);    #-- Замрем на 3 секунды
    _log("Die connection.");
    close CLIENT;

close(SERVER);
_log("Server shutdown");
die;

#-- Выводит на экран тестовую информацию
sub _log { 
    my ($s) = @_;
    print "".(localtime(time))."\t$s\n";

}

#-- Обработка поступившей от клиента команды
sub goCommand {
    my ($line) = @_;
    if (index($line, "<LOGIN")==0) {    #-- Залогинивание
        if ($line=~/NAME=\"([^\"]+)\"/) {
        _log("LOGIN: $1");
#-- Говорим, что такой логин занят (test)
    sendAnswer("<ERROR TEXT=\"Такой логин занят, выберите другой\"/>");    
        }
    }
    $work = 0;
}

#-- Отсылает ответ клиенту. Проблема в том, что русские буквы надо 
#-- кодировать в utf и в конце ставим ноль
sub sendAnswer {
    my ($s) = @_;
    print CLIENT utf($s).chr(0);
}

#-- Функции кодирования русских букв нашел где-то в инете, очень не хотелось
#-- цеплять здоровые библиотеки по работе с utf ради такой мелочи
sub utf {
    my $s = shift;
    $s=~s/([А-Яа-яЪЬЁъьё])/win2utf($1)/eg;
    return $s;
}

sub win2utf {
    my $s = shift;
    if ( ord($s)>=192 and ord($s)<=239) { return chr(208).chr(ord($s)-48) }
    if ( ord($s)>=240 and ord($s)<=255) { return chr(209).chr(ord($s)-112)}
    if ($s=="Ё") { return chr(208).chr(149) }
    if ($s=="ё") { return chr(208).chr(181) }
    if ($s=="Ъ") { return chr(208).chr(172) }
    if ($s=="Ь") { return chr(208).chr(170) }
    if ($s=="ъ") { return chr(208).chr(140) }
    if ($s=="ь") { return chr(208).chr(138) }
    return $s;
}


что вам выдаёт на сервере?

Добавлено через 10 минут и 24 секунды
да и код с первого взгляда, похож на простой сервер...


--------------------
PM   Вверх
Sap1enS
Дата 12.12.2007, 07:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 10.10.2007
Где: Омск

Репутация: нет
Всего: нет



Цитата(nitr @  11.12.2007,  20:48 Найти цитируемый пост)
даже не знаю, на моём сервере всё запустилось. Похоже надо или порт заменить, или у вас на сервере нет доступа к каким-то ресурсам...

Как запускали? Cron? Логи сервер создает ( _log("Server started..."); )?
Порт попробую поменять...
PM MAIL ICQ   Вверх
nitr
Дата 12.12.2007, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2543
Регистрация: 10.2.2006
Где: Россия :)

Репутация: 12
Всего: 84



Sap1enS, да логи именно те, что указаны в скрипте, запускал и так и через крон...


--------------------
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0764 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.