Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.07.2014, 23:37   #1
GrabbeR
Пользователь
 
Регистрация: 17.03.2010
Сообщений: 43
По умолчанию Передача данных между StringGrid'ами от клиента к серверу

Подскажите как решить задачу. Собственно, на сервере и клиенте есть 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;
GrabbeR вне форума Ответить с цитированием
Старый 15.07.2014, 05:35   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

ReceiveText - читает все что успело прилететь, не разбирая
т.е. будет как то так:
ReceiveText1 - ячейка1ячейка2ячейка3ячейка4яче
ReceiveText2 - йка5ячейка6ячейка7ячейка8ячейка

тебе самому надо разбирать где ячейки... вот в html для этого tr/td теги, в CSV - запятые и перевод строки, и т.д. и т.п
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 15.07.2014, 08:19   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
тебе самому надо разбирать где ячейки... вот в html для этого tr/td теги, в CSV - запятые и перевод строки, и т.д. и т.п
+1

GrabbeR, придумайте (самостоятельно), чем Вы будете разделять ячейки (разумеется, символ должен быть такой, которого в ячейках априори быть не может. Например, если в ячейках однострочный текст, без перевода строки, то можно символ #13 использовать как разделитель). Можно ещё перед каждой строкой(ячейкой) её длину передавать. Но с разделителем решение явно проще.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.07.2014, 06:57   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

я обычно использую разделитель *|* такое сочетание нигде не встретиться
ZuBy вне форума Ответить с цитированием
Старый 16.07.2014, 08:00   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Однажды мне пришлось решать подобную задачу - я первыми двумя символами передавал разделитель. Первый попавшийся набор символов, который не встречается в тексте. Символы ессно подбирал перебором в программе. И все потому что и | и ; и еще что-то разделяющее могло попадаться в тексте.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.07.2014, 15:15   #6
GrabbeR
Пользователь
 
Регистрация: 17.03.2010
Сообщений: 43
По умолчанию

Может подскажет кто примером как сделать через разделитель? Буду крайне благодарен!
GrabbeR вне форума Ответить с цитированием
Старый 18.07.2014, 15:48   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Как вариант:

Клиент:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  cc, rc, c, r: Integer; s:string;
begin
  s:='';
  with StringGrid1 do begin 
   for r := 1 to RowCount -1 do
    s:=s+Rows[r].CommaText+#13#10;
  end;
  ClientSocket1.Socket.SendText(s);
end;
Сервер:
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  cc, rc, c, r: Integer; st:TStringList;
begin
  st:=TStringList.Create;
  st.Text:=Socket.ReceiveText;
 
  with StringGrid1 do begin 
   RowCount:=st.Count;
   for r := 1 to RowCount -1 do
    Rows[r].CommaText:=st[i];
  end;
  
  st.free;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача форматированного текста между socket-клиентами с RichEdit`ами. Klaxwork Общие вопросы Delphi 4 18.12.2013 16:45
Передача данных серверу с перезагрузкой dimorik JavaScript, Ajax 4 17.10.2013 16:42
Передача файла от Клиента к Серверу aank10 C++ Builder 2 05.10.2012 18:02
Передача Print Screen'а от клиента к серверу (через сокеты) valdys Работа с сетью в Delphi 5 25.08.2011 12:46
Передача файла от клиента к серверу TFileStream rombler69 Работа с сетью в Delphi 1 30.03.2010 17:45