• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Client-server Sockets Stringgrid

  • Автор темы GrabbeR
  • Дата начала
G

GrabbeR

Наставьте на путь истинный. Пытаюсь отправить содержимое одной строки на сервер, чтобы тот принял и вставил данные в таком же виде (столбцы). Получилось, но данные отправляются в 1 строку таблицы и при повторной отправке перезаписываются в той же строке.
Хочу сделать, чтобы при получении данных они вставлялись в новую строку (динамически созданную) - подскажите примером.

Отправляю на сервер:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
r: Integer; s:string;
begin
s:='';
with StringGrid1 do begin
for r := 0 to RowCount -2 do
s:=s+Rows[r].CommaText+#13#10;
end;
ClientSocket1.Socket.SendText(s);
end;
Принимаю:
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
st : TStringList;
r: Integer;
begin
st:=TStringList.Create;
st.Text:=Socket.ReceiveText;
with StringGrid1 do begin
RowCount:=st.Count;
for r := 0 to RowCount -1 do
Rows[r].CommaText:=st[r];
end;
StringGrid1.RowCount := 5;
st.free;
end;
 
S

sinkopa

Наставьте на путь истинный. Пытаюсь отправить содержимое одной строки на сервер, чтобы тот принял и вставил данные в таком же виде (столбцы). Получилось, но данные отправляются в 1 строку таблицы и при повторной отправке перезаписываются в той же строке.
Хочу сделать, чтобы при получении данных они вставлялись в новую строку (динамически созданную) - подскажите примером.
отправляем
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
// отправить строки
SendRows(1,5,True);
end;


procedure TForm1.SendRows(ARowFrom,			 // с какой строки грида
ARowTo: Integer;			// по какую (включительно)
AppendRows: Boolean); // добавлять или перезаписывать
var
S: string;
R: Integer;
begin
// добавили комманду (в первой "лишней" строке)
if AppendRows then	  // True - добавлять в конец грида
S := '<append>'#13#10
else					// False - перезаписать грид
S := '<replace>'#13#10;

with StringGrid1 do begin
for R := ARowFrom to ARowTo do
S := S + Rows[R].CommaText+#13#10;
end;

ClientSocket1.Socket.SendText(S);
end;
принимаем
Код:
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
st : TStringList;
i,R : Integer;
command: string;
begin
st := TStringList.Create;
st.Text := Socket.ReceiveText; // получили данные

command := st[0]; // прочитали комманду в первой "лишней" строке
st.Delete(0);	 // удалили "лишнюю" строку с командой

if (command = '<append>') then begin
R := StringGrid1.RowCount;	  // с какой строки грида будем вставлять
StringGrid1.RowCount := StringGrid1.RowCount + st.Count; // "растянуть" грид
end
else if (command = '<replace>') then begin
R := 0;
StringGrid1.RowCount := st.Count;
end
else begin
ShowMessage('неизветная команда "'+command+'"');
Exit;
end;

with StringGrid1 do
for i := 0 to st.Count-1 do begin
Rows[R].CommaText := st[i];
Inc(R);
end;

st.free;
end;

както так <_<
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!