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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с сокетами 
:(
    Опции темы
MorrisonHotel
Дата 23.4.2011, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашел в сети пример создания telnet-сервера, немного переделал. Он слушает порт и то, что прилетает пишет в файл. Вот кусок кода.
Код

sysopen(FH,"/home/av/data.txt",O_WRONLY|O_CREAT);
FH->autoflush(1);

while(<$client>)
  {
    ### Если строка пустая переходим в конец блока ###
    next unless /\S/;

    ### Запоминаем полную введенную строку, к примеру df -h ###
    my $full_enter_str = $_;
    chomp($full_enter_str);
    print FH $full_enter_str;

  }
continue
  {
    print $client "Command :";
}

У меня проблема: если отправить какой-то текст, скажем, из telnet-клиента, то все ок, в файл что-то запишется, а вот если ему прилетит нечто вроде: кусок tcpdump'a
Код

0x0000:  4500 0073 0004 0000 f606 d261 d557 5abb  E..s.......a.WZ.
0x0010:  c0a8 0164 5ce9 1a55 25da 786c e3b7 ea87  ...d\..U%.xl....
0x0020:  5018 2c60 30ae 0000 3c54 3036 304d 3e2c  P.,`0...<T060M>,
0x0030:  3030 3238 372c 4d2c 3139 3038 3234 2c32  00287,M,190824,2
0x0040:  3330 3431 312c 3537 3434 2e34 3939 364e  30411,5744.4996N
0x0050:  2c30 3431 3030 2e34 3633 3545 2c30 302e  ,04100.4635E,00.
0x0060:  302c 3030 322e 322c 3133 332e 372c 312c  0,002.2,133.7,1,
0x0070:  3631 0d                                  61.

Как мне убрать служебные сиволы и оставить в переменной $_ только валидные сиволы?

Хотя если отправить строку 
Код

<T060M>,00287,M,124427,220411,5800.1577N,04200.1038E,01.0,073.4,196.4,1,69
 из telnet-клиента, то все ок, она запишется в файл.

Прошу помощи.

Это сообщение отредактировал(а) MorrisonHotel - 24.4.2011, 01:04
PM Jabber   Вверх
Pfailed
Дата 24.4.2011, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 933
Регистрация: 19.7.2009

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



Цитата(MorrisonHotel @  23.4.2011,  22:31 Найти цитируемый пост)
Как мне убрать служебные сиволы и оставить в переменной $_ только валидные сиволы?

Код

s/служебные символы//g;




--------------------
PM MAIL   Вверх
MorrisonHotel
Дата 24.4.2011, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну а как их перечислить? в ascii они выглядят примерно так: ^M ^O...

Это сообщение отредактировал(а) MorrisonHotel - 24.4.2011, 12:19
PM Jabber   Вверх
arto
Дата 24.4.2011, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



пoпробуйте символьный класс: perldoc perlrecharclass
PM MAIL ICQ   Вверх
MorrisonHotel
Дата 24.4.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Пожалуйста, немного (много) подробностей smile
PM Jabber   Вверх
arto
Дата 24.4.2011, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



зачитывание вслух документации -- 50€/hour
PM MAIL ICQ   Вверх
MorrisonHotel
Дата 24.4.2011, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Попробовал так:
Код

my $full_enter_str = $_;
$full_enter_str =~ s/[^\w]//go;
$full_enter_str =~ s/_//go;
 оставить только буквы и цифры. Все равно ничего не пишет в файл.

Это сообщение отредактировал(а) MorrisonHotel - 24.4.2011, 20:52
PM Jabber   Вверх
MorrisonHotel
Дата 24.4.2011, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Решил вопрос через inetd
PM Jabber   Вверх
shamber
Дата 24.4.2011, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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


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

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


 




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


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

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