Сторона сервера:
Клиент отправляет \r\n
вместо \n
, что будет учитывать дополнительный символ.Вы можете перевести его обратно на новую строку с простым регулярным выражением:
# $data holds the input line from the client.
$data =~ s/\r\n/\n/g; # Search for \r\n, replace it with \n
На стороне клиента:
Предполагается, что вы используете Net :: Telnet, вы, вероятно, отправляете 2 символа для новой строки, \r
и \n
, как указано в Telnet RFC .
Документация, с которой я связан, говорит об этом,
Во входном потоке каждая последовательность возврата каретки и перевода строки (то есть "\ 015 \ 012" или CR LF) преобразуется в "\ n".В выходном потоке каждое вхождение "\ n" преобразуется в последовательность CR LF.Смотрите binmode (), чтобы изменить поведение.Протоколы TCP обычно используют последовательность ASCII, возврат каретки и перевод строки для обозначения новой строки.
И по умолчанию это не двоичный режим (binmode), что означает, что все экземпляры \n
в ваших клиентских данныхбудет заменен на \r\n
перед отправкой на сервер.
По умолчанию Binmode равен 0, что означает перевод новой строки.
Вы можете остановить модульот замены ваших новых строк вызовом binmode
в вашем файловом дескрипторе, или в случае Net :: Telnet, вызовите binmode
для вашего объекта и передайте 1.
# Do not translate newlines.
$obj->binmode(1);
Или на сервере вы можетенайдите \r\n
во входных данных и замените его на \n
.