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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Онлайн сервер, Perl основы создания приложения 
:(
    Опции темы
VoAnt
Дата 12.5.2005, 13:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Постановка задачи
Существует FreeBSD сервер, подключеный к интернет.
Задача заключается в написании приложения, к-е постонно висит в памяти сервера и принимает-отправляет данные от одного клиента - другому.
Как пример - ICQ

Впрос
Как быстро нацарапать такой минисервер с админкомандой "die", к-я выгружает программу из памяти.

#----------------

Поэтапно:

Этап 1
какие функции исспользуються для открытия портов и прослушивания их на предмет приёма.

Этап 2
как определить IP клиента

Этап 3
как держать такую программу всегда в памяти?

Спасибо за помощь!
PM MAIL ICQ   Вверх
Chuck
Дата 12.5.2005, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Сушня
**


Профиль
Группа: Эксперт
Сообщений: 442
Регистрация: 12.12.2003
Где: Узбекистан, Ташке нт

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



А не легче юзать уже готовое?
Цитата
какие функции исспользуються для открытия портов и прослушивания их на предмет приёма.

http://doc.diesel.elcat.kg/Perl/lib/site/LWP/Socket.html
http://www.getinfo.ru/article135.html
Цитата
как определить IP клиента

Юзать функции работы с сетью, протоколами, сокетами!
Цитата
как держать такую программу всегда в памяти?

chuck@mon chuck $ ./server &
И будет она у тебя висеть, пока сам не kill-нешь, либо пока она не завершится!

Это сообщение отредактировал(а) Chuck - 12.5.2005, 15:51
PM MAIL WWW GTalk   Вверх
chaos
Дата 13.5.2005, 07:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

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



Цитата(VoAnt @ 12.5.2005, 13:43)
Постановка задачи
Существует FreeBSD сервер, подключеный к интернет.
Задача заключается в написании приложения, к-е постонно висит в памяти сервера и принимает-отправляет данные от одного клиента - другому.
Как пример - ICQ

Впрос
Как быстро нацарапать такой минисервер с админкомандой "die", к-я выгружает программу из памяти.

#----------------

Поэтапно:

Этап 1
какие функции исспользуються для открытия портов и прослушивания их на предмет приёма.

Этап 2
как определить IP клиента

Этап 3
как держать такую программу всегда в памяти?

Спасибо за помощь!

вот тебе пища для размышление
1)
Код

use IO::Socket;

$sock = new IO::Socket::INET (LocalHost => 'localhost',
                              LocalPort => 1200,
                              Proto     => 'tcp',
                              Listen    => 5,
                              Reuse     => 1                            
                             );

die "$!" unless $sock;

while ($new_sock = $sock->accept()) {
    while (defined ($buf = <$new_sock>)) {
       print $buf;
    }
}
close ($sock);

2)
Код

($port,$ipaddr) = sockaddr_in($new_sock->sockname());
$ipaddr = inet_ntoa($ipaddr);

3) для этого есть fork()

Это сообщение отредактировал(а) chaos - 13.5.2005, 10:55
PM WWW   Вверх
korob2001
Дата 13.5.2005, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

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



Цитата

какие функции исспользуються для открытия портов и прослушивания их на предмет приёма.

chaos - на это вопрос ответил. Можно заюзать ещё модуль Socket, но IO::Socket всё же лучше.
Цитата

как определить IP клиента

Код

$ip = $ENV{ HTTP_X_FORWARDED_FOR } || $ENV{ REMOTE_ADDR };

Цитата

как держать такую программу всегда в памяти?

До тех пор, пока приложение "сервер" ждёт, оно и так висит в памяти.

Это сообщение отредактировал(а) korob2001 - 13.5.2005, 17:31


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
wladk
Дата 16.5.2005, 13:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата

Как быстро нацарапать такой минисервер с админкомандой "die", к-я выгружает программу из памяти.


"быстро" или "правильно"? smile

Если "быстро" - не знаю, наверное искать что то готовое, если "правильно" то начать с "Эффективного програмирования TCP/IP" Йона Шнайдера(автора могу переврать), и продолжить "Разработка сетевых программ на PERL" Линкольн Д. Штайн. В обоих книках есть достаточно примеров, какой-то их них вполне можно будет взять за основу...

Цитата

Этап 3
как держать такую программу всегда в памяти?


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


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

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


 




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


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

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