Отправка и получение простого строкового значения с помощью Indy (Delphi) - PullRequest
0 голосов
/ 30 июля 2010

есть ли способ отправить простой текст (строковое значение) без использования WriteLN и ReadLN?
Для функции ReadLn требуется LF char, а когда я посылаю текстовое сообщение через winsock в Indy, ReadLnне может получить сообщение правильно, и некоторые исключения будут происходить непрерывно.

Ответы [ 2 ]

2 голосов
/ 30 июля 2010

Если вы не хотите использовать символ завершения (WriteLn / ReadLn делают это таким образом), то запишите количество байтов, которые вы хотите отправить сначала в сокет, а затем запишите или прочитайте столько байтов наОбратная сторона.Вы также можете использовать другой символ завершения, чем символ новой строки, который вы должным образом вытащили из шляпы.Возможно, Chr (251), это хорошо.

В конце, держу пари, вы вернетесь к WriteLn / ReadLn.Потому что все просто, ожидаемо и работает.

1 голос
/ 30 июля 2010

Есть ли в вашем тексте символ завершения?Если это так, то вы можете установить параметр ATerminator для ReadLn, чтобы вместо символа LF он прекратил чтение, когда достигнет вашего собственного определенного символа завершения.

Если не существует определенного символа завершения, но вы знаете,Максимальная длина текста, вы можете установить параметр AMaxLineLength ReadLn.Это приведет к тому, что ReadLn будет принимать только текст, длина которого меньше AMaxLineLength.

Если нет определенного завершающего символа и вы не знаете максимальной длины полученного текста, вы можете использовать ReadStream с его параметром AReadUntilDisconnect, установленным вПравда вместо использования ReadLn.Конечно, ReadStream читает данные как поток байтов.Вы можете назначить ему TStringStream, чтобы получить полученные байты в виде строки.Параметр AReadUntilDisconnect указывает ReadStream продолжать чтение полученных данных, пока клиент не отключится.Поэтому, если вы установите этот параметр, ваш клиент должен отключиться, как только текст будет отправлен на сервер.

...