Передача данных между StringGrid'ами от клиента к серверу
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.217.172] |
|
|
Соблюдайте общие правила форума
MSDN Library
FAQ раздела
Поиск по разделу
Как правильно задавать вопросы
Передача данных между StringGrid'ами от клиента к серверу
|
Сообщ.
#1
,
|
|
|
|
Подскажите как решить задачу. Собственно, на сервере и клиенте есть StringGrid с одинаковым количеством столбцов (5) и строк. Клиенту нужно отправить на сервер данные конкретной строки.
Делаю так, но на сервере все данные принимаются в одну ячейку скопом. На клиенте: ![]() ![]() procedure TForm1.Button1Click(Sender: TObject); var cc, rc, c, r: Integer; begin cc := Form1.StringGrid1.ColCount; rc := Form1.StringGrid1.RowCount; for r := 1 to rc -1 do for c := 0 to cc -1 do Form1.ClientSocket1.Socket.SendText(Form1.StringGrid1.Cells [c,r]); end; На сервере: ![]() ![]() procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket); var cc, rc, c, r: Integer; begin cc := Form1.StringGrid1.ColCount; rc := Form1.StringGrid1.RowCount; for r := 1 to rc -1 do for c := 0 to cc -1 do Form1.StringGrid1.Cells [c,r] := Socket.ReceiveText; end; |
|
Сообщ.
#2
,
|
|
|
|
а) Данные по сети передаются не в том порядке, в котором отправляются
б) Они могут склеиваться в единые фрагменты, а могут наоборот (если больше мту) фрагментироваться. с) Из первых двух пунктов => Ваш алгоритм никогда не отработает так как надо. Добавлено А если и отработает то это чисто случайность. |
|
Сообщ.
#3
,
|
|
|
|
GrabbeR, с учетом того что сказал Gonarh, Вам надо отправлять не только текст ячеек, но и координаты ячеек
что-то вроде такого: Form1.ClientSocket1.Socket.SendText(IntToStr®+','+IntToStr©+','+Form1.StringGrid1.Cells[c,r]); ну и при получении сначала выделять из строки координаты ячейки, а потом уж в соотв. ячейку писать текст... |
|
Сообщ.
#4
,
|
|
|
|
Цитата Gonarh @ а) Данные по сети передаются не в том порядке, в котором отправляются Это как это? |
|
Сообщ.
#5
,
|
|
|
|
Настроенный QoS на роутерах приоритезирует пакеты. Предложение сформулировал неверно
|
|
Сообщ.
#6
,
|
|
|
|
Хорошо, а если на клиенте заменить StringGrid на пару Edit'ов. Как отправить данных из двух сразу, чтобы они попали в разные ячейки StringGrida'a, а не в одну? Делаю так.
На клиенте: ![]() ![]() Form1.ClientSocket1.Socket.SendText(Edit1.Text); Form1.ClientSocket1.Socket.SendText(Edit2.Text); На сервере: ![]() ![]() Form1.StringGrid1.Cells [0,1] := Socket.ReceiveText; Form1.StringGrid1.Cells [1,1] := Socket.ReceiveText; |
|
Сообщ.
#7
,
|
|
|
|
Неправильно делаешь. neut ral подсказал как надо.
|
|
Сообщ.
#8
,
|
|
|
|
Цитата Gonarh @ Настроенный QoS на роутерах приоритезирует пакеты. Предложение сформулировал неверно Разве что для нескольких подключений, но не внутри же одного |
|
Сообщ.
#9
,
|
|
|
|
Может подскажет кто примером как сделать через разделитель? Буду крайне благодарен!
|
|
Сообщ.
#10
,
|
|
|
|
Цитата GrabbeR @ Может подскажет кто примером как сделать через разделитель? Ну, тут типовая ошибка при работе с сокетами - пытаться кидаться данными, отталкиваясь от UI. Подумайте о передаваемых через сокет данных как о выборке из базы: таблицы, колонки, строки. Ну, и длину данных, сколько ожидать для вычитки, тоже считается хорошим тоном передать в заголовке. Итого, Вам нужно нарисовать хоть простенький, но протокол приёма-передачи. Для примера гляньте на HTTP (а то и вообще берите его как основу, будет эдакий REST API style )Клиент говорит Цитата PUT mygrid?col=5&row=8 Content-Length: 32055 <пустая строчка> ...далее бинарный поток с данными... Сервак это парсит. Бинарный поток данных - опять же, можно дробить на заголовки строк и сами строки, а их уже на заголовки колонок и сами ячейки. |
|
Сообщ.
#11
,
|
|
|
|
Цитата Fr0sT @ Цитата Gonarh @ Настроенный QoS на роутерах приоритезирует пакеты. Предложение сформулировал неверно Разве что для нескольких подключений, но не внутри же одного Не обязательно, можно хоть в каждом пакете менять DSCP флаг, только зачем? |