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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2008, 07:56   #1
frodo
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 48
По умолчанию stringgrid и tcliensocket

как передать все таблицу на клиент! т.е. вот код сервера
Код:
for i:=1 to 5 do
for j:=1 to 5 do
Serversocket1.Socket.Connections[0].SendText(tabl.Cells[i,j]);
а на клиенте незнаею что написать, ну примерно знаю что так

Код:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
  var i,j:integer;
begin
for i:=1 to 5 do
for j:=1 to 5 do begin
 advstringgrid1.Cells[i,j]:=Socket.ReceiveText;
end;
end;
но знаю это глупо, вся таблица непередается!вот кто подскажет как написать код для клиента!
frodo вне форума Ответить с цитированием
Старый 04.05.2008, 17:53   #2
frodo
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 48
По умолчанию

ну что никто непоможет????
frodo вне форума Ответить с цитированием
Старый 04.05.2008, 20:12   #3
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Между посылаемыми данными нужно ставить разделитель. Например так
(обратите внимание, в примере другие индексы):

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i, j:integer;
    S:String;
begin
   S := '';
   for i:=0 to 5 do begin
     for j:=0 to 5 do begin
        S := S + StringGrid1.Cells[i, j]+#13;
     end;
   end;
   Server.Socket.Connections[0].SendText(S);
end;
Или обеспечить, чтобы текст во всех ячейках был одинаковой длины. А принимаемый текст нужно делить по выбранному разделителю и помещать в нужные ячейки:

Код:
var N:integer = 0;

procedure TForm1.ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
var S1, S:String;
    i:integer;
begin
   S1 := '';
   S := Socket.ReceiveText;
   for i:=1 to length(S) do begin
      if S[i] = #13 then begin
         StringGrid2.Cells[N div 6, N mod 6] := S1;
         S1 := '';
         inc(N); if N >= 36 then N := 0;
      end else
         S1 := S1 + S[i]
   end;
end;
PS. Строго говоря этот код не совсем корректен. Нужно было-бы накапливать принимаемый текст в отдельном буфере и только после приема всего текста делить.
alexBlack вне форума Ответить с цитированием
Старый 04.05.2008, 20:20   #4
frodo
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 48
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
PS. Строго говоря этот код не совсем корректен. Нужно было-бы накапливать принимаемый текст в отдельном буфере и только после приема всего текста делить.
Оооо ты подал идею! тока как мне организовать такое хранение
frodo вне форума Ответить с цитированием
Старый 04.05.2008, 20:30   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Я бы вообще SendBuf использовал. Но это на Ваше усмотрение. Можно и с SendText.

Положим, что Вы не только одну таблицу передавать будете. Нужно разработать какой-то свой формат и следовать ему при передаче и приеме. Например:

Передаем текст и указываем его назначение:
-первый байт - номер колонки
-второй байт - номер строки
-третий байт - само значение, которое заканчивается, например #13

Принимаем текст. Из него выделяем все данные. И уже после этого решаем, для чего предназначены эти данные.

Это в общем случае. Если же нужно передать только одну таблицу, то код который я привел, рабочий. На форуме неоднократно обсуждались вопросы по сокетам. Попробуйте в поиске набрать ClientSocket - есть много примеров.
alexBlack вне форума Ответить с цитированием
Старый 04.05.2008, 20:42   #6
frodo
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 48
По умолчанию

alexBlack, спсибо большое!
frodo вне форума Ответить с цитированием
Старый 04.05.2008, 22:01   #7
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

а красивее бы и надежней было обмениваться csv =)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 05.05.2008, 05:22   #8
frodo
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 48
По умолчанию

Цитата:
Сообщение от Квэнди Посмотреть сообщение
а красивее бы и надежней было обмениваться csv =)
С сетью я вообще не бум бум!!!а время поджимает!!!может если нетрудно примерчик приведете?
frodo вне форума Ответить с цитированием
Старый 05.05.2008, 09:42   #9
frodo
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 48
По умолчанию

Цитата:
Сообщение от alexBlack Посмотреть сообщение
Между посылаемыми данными нужно ставить разделитель. Например так
(обратите внимание, в примере другие индексы):

Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i, j:integer;
    S:String;
begin
   S := '';
   for i:=0 to 5 do begin
     for j:=0 to 5 do begin
        S := S + StringGrid1.Cells[i, j]+#13;
     end;
   end;
   Server.Socket.Connections[0].SendText(S);
end;
Или обеспечить, чтобы текст во всех ячейках был одинаковой длины. А принимаемый текст нужно делить по выбранному разделителю и помещать в нужные ячейки:

Код:
var N:integer = 0;

procedure TForm1.ClientOnRead(Sender: TObject; Socket: TCustomWinSocket);
var S1, S:String;
    i:integer;
begin
   S1 := '';
   S := Socket.ReceiveText;
   for i:=1 to length(S) do begin
      if S[i] = #13 then begin
         StringGrid2.Cells[N div 6, N mod 6] := S1;
         S1 := '';
         inc(N); if N >= 36 then N := 0;
      end else
         S1 := S1 + S[i]
   end;
end;
PS. Строго говоря этот код не совсем корректен. Нужно было-бы накапливать принимаемый текст в отдельном буфере и только после приема всего текста делить.

этот вариант пошел!!!! тока вот непонял как он работае! ну ладно главное что пошел, а потом придет время разберусь! alexBlack еше раз спс
frodo вне форума Ответить с цитированием
Старый 06.05.2008, 16:55   #10
frodo
Пользователь
 
Регистрация: 06.04.2008
Сообщений: 48
По умолчанию

блин вышла трабла такая, мне же еше надо передовать количество строк и столбцов! помагите еше с этим, немогу чет понять эту сеть=)
frodo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid Devikss Общие вопросы Delphi 8 25.05.2008 16:14
StringGrid MAcK Общие вопросы .NET 2 31.03.2008 11:40
StringGrid Dimon88 Компоненты Delphi 15 14.02.2008 11:44
StringGrid bart77 Помощь студентам 9 27.04.2007 09:35
Код 13 и stringGrid Alar Общие вопросы Delphi 1 08.02.2007 22:44