![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| lux16 |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.8.2010 Репутация: нет Всего: нет |
Привет, народ. Столкнулся с проблемой. Есть такая структура:
И такие процедуры:
И в Memo1 просто добовляется пустая строка, но если в процедуре procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); добавить строку ShowMessage( '' );, то есть привести ее к такому виду:
То все работает, и в Memo1 добовляется строка. Подскажите, что кто знает |
||||||
|
|||||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
А какой смысл передавать по сети массив указателей на строку?
Даже в пределах одной программы это странная затея... А во втором случае работает потому, что ты стопоришь выход из функции. Если остановки не будет, то твои строки перестают существовать. А так, как ты переслал не строки, а указатели на них, то эти указатели будут показывать на ничто, т.к. строк в памяти уже нет. |
|||
|
||||
| lux16 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.8.2010 Репутация: нет Всего: нет |
Либо я что - то не понял, либо что - то не так. Мне нужно передавать строки переменной величины, то есть я их размер не знаю. Для этого мне надо Array Of String. Как его передать расскажите, никакой указатель я не передаю
Добавлено через 10 минут и 5 секунд Всем спасибо, нашел решение. На форуме programmersforum помогли. После отправки пишу такой код Application.ProccesMessages; |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Что такое string?
Это указатель на блок данных в памяти, где находится текст и длина строки. Таким образом, array of string - массив указателей. Вот его ты и передаёшь. Повторяю - ты передаёшь не строки. Как только ты выйдешь за пределы своей программы (например пересылка между двумя компьютерами или двумя программами), твои указатели потеряют весь смысл. Это, что касается того, что ты делаешь неправильно. Теперь о том, как нужно делать. Вместо array of string используй TStringList. А дальше обычное правило пересылки данных нефиксированной длины. Сначала отправляешь 4 байта - размер данных, потом сами данные. В твоём случае это Socket.SendBuf(Length(StringList.Text), 4); Socket.SendBuf(StringList.Text[1], Length(StringList.Text) * SizeOf(char)); |
|||
|
||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
||||
|
||||
| lux16 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 10.8.2010 Репутация: нет Всего: нет |
Млин, помогите разобраться
|
|||
|
||||
| Snowy |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 53 Всего: 484 |
Сформируй весь текст через TStringList, потом возьми весь текст одной строкой - TStringList.Text.
Передай длину текста. Передай сам текст. Я уже дал 2 строки отправки. Как принять:
len: integer - длина текста в символах s: string - строка, в которую принять текст. StringList - результат, в который положить принятый текст. Вместо StringList можешь использовать любой TStrings (например Memo1.Lines) Как работать с TStrings/TStringList, надеюсь знаешь. Ну и, как дополнительный совет - всю работу с сокетами помещай в try блок. Ибо исключения при работе с сетью - обычное дело. Добавлено через 8 минут и 38 секунд Проще нарисовать...
|
||||
|
|||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |