Получение текста через TCP сокет, Нахождение символа конца строкит () |
Здравствуйте, гость ( Вход | Регистрация )
Получение текста через TCP сокет, Нахождение символа конца строкит () |
fsMark |
2.5.2008, 23:42
Сообщение
#1
|
Студент Группа: Участник Сообщений: 97 Регистрация: 23.4.2008 Из: г. Киров Пользователь №: 155 Спасибо сказали: 10 раз(а) Репутация: 1 |
Получаю данные QTcpServer`ом от удаленного telnet клиента, признак конца команды (насколько я понял из немногочисленной документатции) есть ничто иное как признак конца строки и перевод каретки (т.е. "\n\r").
Использую следующий код для получения команды целиком (она записывается в буфер)
Такой код ничего хорошего не дает ((, возникает вопрос правильно ли я ищу признак конца строки и перевод каретки.. или может я неправ насчет того что передает telnet при нажатии enter`а? Кто сталкивался подскажите пожалуйста. |
|
|
Litkevich Yuriy |
3.5.2008, 0:00
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
могу, путать, но помоему в telnet'е UNIX'овый конец т.е. \n
но \n\r, тогда вроде тоже должно катить |
|
|
fsMark |
3.5.2008, 0:10
Сообщение
#3
|
Студент Группа: Участник Сообщений: 97 Регистрация: 23.4.2008 Из: г. Киров Пользователь №: 155 Спасибо сказали: 10 раз(а) Репутация: 1 |
посредствам indexOf("") не определяется не \n, не \n\r. Видимо надо както подругому искать конец строки..
P.S. Тестировал видовым телнетом. Сообщение отредактировал fsMark - 3.5.2008, 0:12 |
|
|
ViGOur |
3.5.2008, 11:28
Сообщение
#4
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Вообще-то не "\n\r", а "\r\n".
Другими словами так:
посредствам indexOf("") не определяется не \n, не \n\r. Видимо надо както подругому искать конец строки.. А ты уверен, что у тебя сервер принимает данные?
P.S. Тестировал видовым телнетом. |
|
|
fsMark |
3.5.2008, 12:22
Сообщение
#5
|
Студент Группа: Участник Сообщений: 97 Регистрация: 23.4.2008 Из: г. Киров Пользователь №: 155 Спасибо сказали: 10 раз(а) Репутация: 1 |
Уверен, все текстовые символы получаю нормально, немогу только определить конец строки. Могет QTextStream их както подругому себе представляет?
Цитата Вообще-то не "\n\r", а "\r\n". Другими словами так:
А у меня так и написанно..)) в смысле "\n\r". Проблема в том что он даже "\n" не находит... а он в любом варианте должен быть. |
|
|
ViGOur |
3.5.2008, 13:43
Сообщение
#6
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
А у меня так и написанно..)) в смысле "\n\r". Проблема в том что он даже "\n" не находит... а он в любом варианте должен быть. Извини, уже который раз при копи-пасте на одни и те же грабли наступаю, копирую, но поправить забываю, должно быть так:
Могет QTextStream их както подругому себе представляет? Скорее всего так оно и есть, попробуй читать не в QTextStream, а с помощью qint64 QIODevice::read ( char * data, qint64 maxSize ).
|
|
|
fsMark |
3.5.2008, 19:07
Сообщение
#7
|
Студент Группа: Участник Сообщений: 97 Регистрация: 23.4.2008 Из: г. Киров Пользователь №: 155 Спасибо сказали: 10 раз(а) Репутация: 1 |
Все получилось, сделал так:
|
|
|
ViGOur |
3.5.2008, 22:03
Сообщение
#8
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
Думаю стоит поработать над вариантом, что будет, если тебе прийдет пакет 1024 байт? Или 2048, или n байт?
Другими словами cчитывать то количество байт, которое пришло, а не то, под которое ты выделил память. Читай до тех пор, пока функция read не вернет 0 байт, так как: Цитата 0 is returned when no more data is available for reading. Используй функцию read ( char * data, qint64 maxSize ).
Сообщение отредактировал ViGOur - 3.5.2008, 22:05 |
|
|
Текстовая версия | Сейчас: 26.11.2024, 18:25 |