![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
Mr_Nuke |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Всем привет! Только вчера начал изучать клиент-серверную связь.
Столкнулся с проблемой, от сервера к клиенту хочу передать два слова типа String При этом, хочу что бы клиент так же принял их раздельно и записал в разные переменные. Но клиент записывает их в одну строковую переменную. Использую обычный Socket.ReceiveText и Socket.SendText |
|||
|
||||
Gnus |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 22.11.2010 Где: СПб Репутация: нет Всего: нет |
используйте маркер окончания посылки, чтобы их разделять. на принимающей стороне анализируйте посылку на наличие маркера и разделяйте строки.
|
|||
|
||||
Mr_Nuke |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Это не совсем подойдет. Ожидается, что обе строки будут больше 200 символов. Боюсь, что когда клиент соединит обе строки в одну, часть данных может потеряться.
В принципе, если бы можно было передать массив строк, это бы подошло. Нашел такой код: Сервер:
Клиент
Все работает, но если в описании типа массива Byte заменить на String, передается ерунда... |
||||
|
|||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 4 Всего: 41 |
Еще бы не ерунда. Ты передаешь четыре указателя, которые имеют смысл только в адресном пространстве сервера. Теперь из клиента передай серверу обратно эти указатели. И "попроси", чтобы сервер вернул данные, на которые указывают эти указатели. ![]() ![]() -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Mr_Nuke |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Да, о том, что передаются указатели, как-то не подумал
![]() Так как мне можно передать, уж грубо говоря текст, длинной символов в 600? |
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 4 Всего: 41 |
array[0..599]of char Добавлено @ 19:09 Для передачи массива строк (последовательностей данных не фиксированной длинны) нужно передать: N:integer //Количество строк mL:array[0..N-1]of integer //размеры строк data:array[0..mL[0]+mL[1]+...+mL[N-1]-1]of char//сами строки Это сообщение отредактировал(а) Чучмек - 19.12.2011, 19:11 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Mr_Nuke |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Чучмек Крута! Но пока разбираюсь с символами
Сервер
Клиент
Клиент получает Buf [0] = 'b' [1] = 'a' Последние 2 символа не совпадают, при том третий постоянно меняется с каждым запуском программы Это сообщение отредактировал(а) Mr_Nuke - 19.12.2011, 19:40 |
||||
|
|||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 4 Всего: 41 |
А какая дельфа?
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Mr_Nuke |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Embarcadero RAD Studio 2010
|
|||
|
||||
Чучмек |
|
|||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 4 Всего: 41 |
ReceiveBuf(buff,8)
-------------------- умную мысль держи при себе, а дурной - поделись с другими |
|||
|
||||
Mr_Nuke |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
Жестко! Но помогло! Чучмек, спасибо, очень выручил
![]() |
|||
|
||||
Чучмек |
|
||||
НЭТ БИЛЭТ ![]() ![]() Профиль Группа: Участник Сообщений: 841 Регистрация: 11.5.2008 Где: СССР Репутация: 4 Всего: 41 |
Ну теперь пробуй строку передать
На сервере:
На клиенте
s:=getMem(l); Это сообщение отредактировал(а) Чучмек - 19.12.2011, 20:03 -------------------- умную мысль держи при себе, а дурной - поделись с другими |
||||
|
|||||
Mr_Nuke |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 101 Регистрация: 6.4.2007 Репутация: нет Всего: нет |
![]() Правда теперь, когда могу передать массив, передавать строку уже не нужно, с массивом даже проще! Но для саморазвития, очень даже полезно ![]() П.С. Читая твои ответы, невольно задумываешься над подписью
![]() |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Чуть испорчу настроение ![]() И то и другое - до тех пор, пока передача производится в пределах одного компьютера или (максимум) - в незагруженной трафиком локалке. Что будет, если (вполне реальная ситуация) передаем 2 посылки по 8 байт в каждой; при первом OnReceive придет 2 байта, а все остальные - при втором вызове события? Практически то же - для передачи. Буфер сокета может быть забит под завязку, и отправятся далеко не все данные, которые хочется передать. А в это не отрабатывается. Сие достаточно желательно учитывать, потому что при простом дебаге такие штуки отловить нереально, а жизнь приложению испортится по максимуму. P.S. Может, это всё и есть, просто из постов и кода не видно. |
|||
|
||||
artmaestro |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 80 Регистрация: 8.11.2010 Репутация: 1 Всего: 1 |
Массив из строк таким же образом можно передавать ?
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |