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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2019, 20:37   #11
linda88
Пользователь
 
Регистрация: 17.01.2019
Сообщений: 78
По умолчанию

Цитата:
Сообщение от Aliens_wolfs Посмотреть сообщение
Вот тема "обмен сообщениями", в ней есть пример своего протокола обмена данными по сети, по изучайте, возможно кое что для себя найдете. https://www.programmersforum.ru/show...=186538&page=4
Месье, это у меня есть:

Сервер

Код:

Код:
unit Znaika1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti,
  FMX.Grid.Style, Data.Win.ADODB, Data.DB, FMX.Controls.Presentation,
  FMX.ScrollBox, FMX.Grid, FMX.Ani, Fmx.Bind.Grid, System.Bindings.Outputs,
  Fmx.Bind.Editors, Data.Bind.Controls, Data.Bind.EngExt, Fmx.Bind.DBEngExt,
  Data.Bind.Components, FMX.Layouts, Fmx.Bind.Navigator, Data.Bind.Grid,
  Data.Bind.DBScope, FMX.Edit, FMX.StdCtrls, IdBaseComponent, IdComponent,
  IdTCPConnection, IdTCPClient, IdHTTP, IdCustomTCPServer, IdTCPServer,
  IdContext, FMX.Memo;

type
  Tzaika = class(TForm)
    ADOConnection1: TADOConnection;
    Add: TButton;
    save: TButton;
    ADODataSet1: TADODataSet;
    StringGrid1: TStringGrid;
    BindSourceDB1: TBindSourceDB;
    LinkGridToDataSourceBindSourceDB1: TLinkGridToDataSource;
    BindingsList1: TBindingsList;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    LinkControlToFieldДатаактивации: TLinkControlToField;
    LinkControlToFieldДатапродажи: TLinkControlToField;
    LinkControlToFieldКод: TLinkControlToField;
    LinkControlToFieldПоле1: TLinkControlToField;
    LinkControlToFieldПредмет: TLinkControlToField;
    LinkControlToFieldТелефон: TLinkControlToField;
    LinkControlToFieldШкола: TLinkControlToField;
    IdHTTP1: TIdHTTP;
    Active: TButton;
    IdTCPServer1: TIdTCPServer;
    Memo1: TMemo;
    procedure AddClick(Sender: TObject);
    procedure saveClick(Sender: TObject);
    procedure ActiveClick(Sender: TObject);
    procedure IdTCPServer1Execute(AContext: TIdContext);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  zaika: Tzaika;
 a: array of string;
implementation

{$R *.fmx}

procedure Tzaika.ActiveClick(Sender: TObject);
begin

 idTcpServer1.DefaultPort:=8480; //Устанавливаем порт, такой же, как и у клиента
 idTcpServer1.Active:=true; //Включаем сервер

end;

procedure Tzaika.AddClick(Sender: TObject);
begin
  zaika.ADODataSet1.Insert
end;

procedure Tzaika.IdTCPServer1Execute(AContext: TIdContext);
var
S:string;
begin
s:= AContext.Connection.Socket.ReadLn; //Записываем в переменную "s" сообщение, присланное клиентом.
Memo1.Lines.add('['+Timetostr(time)+'] '+'['+AContext.Connection.Socket.Binding.PeerIP+'] '+ s); //Добавляем в Memo время, ip-adress клиента и сообщение

end;

procedure Tzaika.saveClick(Sender: TObject);
begin
  zaika.ADODataSet1.Post
end;

end.
Клиент:
Код:

Код:
unit client1;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Edit,
  FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox, FMX.Memo,
  IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient;

type
  Tclient = class(TForm)
    IdTCPClient1: TIdTCPClient;
    Memo1: TMemo;
    conect: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    procedure conectClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  client: Tclient;

implementation

{$R *.fmx}

procedure Tclient.Button1Click(Sender: TObject);
begin
 if idTcpClient1.Connected  then //Проверяем, есть ли подключение к серверу.
  begin
   idTcpClient1.Socket.WriteLn(edit2.text); //Посылаем текст, введенный в edit2, серверу.
   memo1.Lines.Add('['+Timetostr(time)+'] '+'Команда "'+ edit2.Text + '" послана серверу!'); //Добавляем запись в Memo клиента
  end
else memo1.Lines.Add('['+Timetostr(time)+'] '+'Вы не подключены к серверу!'); //Добавляем запись в Memo клиента

end;

procedure Tclient.conectClick(Sender: TObject);
begin
 idTcpClient1.Host:=edit1.text; //Вводим внутренний ip-adress сервера
 idTcpClient1.Port:=8480; //Порт клиента и сервера должен быть одним и тем же.
 idTcpClient1.Connect(); //Подключаемся к серверу
 if idtcpclient1.Connected=true then idTcpClient1.Socket.WriteLn('Client is connected'); //Если успешно подключились к серверу, то отправляем сообщение серверу о подключении.

end;

end.
мне теперь нужно предать таблицу

Последний раз редактировалось Аватар; 10.04.2019 в 10:34.
linda88 вне форума Ответить с цитированием
Старый 09.04.2019, 21:05   #12
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Ну так вперед, чего ждете? Можете в лоб самый тупой вариант проткола взять, типа: 1 1 значение 1 2 значение...
p51x вне форума Ответить с цитированием
Старый 09.04.2019, 22:50   #13
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Используете цикл записываете свои данные в массив или лучше сразу в поток.
И отправляет размер потока затем сам поток. А на приемной стороне читаете

ReadLn читает до тех пор пока не встретит NL, а если он будет в таблицы то передача сломается. Что-бы не сломалось отправляем размер и вычитываем столько, сколько указали в размере посылки.

Код:
// Отправка
   Stream:=TStringStream.Create('123'#13#10'321');
   Size:=Length(Stream.Bytes);
   IdTCPClient1.IOHandler.Write(Size);
   IdTCPClient1.IOHandler.Write(Stream);
Код:
// Приём

  Stream:=TMemoryStream.Create;
     Reader:=TBinaryReader.Create(Stream);
     Size:=AContext.Connection.IOHandler.ReadInt32;
     AContext.Connection.IOHandler.ReadStream(Stream, Size);
     Stream.Position:=0;
  Memo1.Lines.Add('Новое сообщение от:'+
     AContext.Binding.PeerIP+':'+IntToStr(AContext.Binding.PeerPort)+'>'+
     String(Reader.ReadChars(Size)));
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia вне форума Ответить с цитированием
Старый 10.04.2019, 09:57   #14
linda88
Пользователь
 
Регистрация: 17.01.2019
Сообщений: 78
По умолчанию

Получается я должна предать размер вот так:
Stringgrid1.RowCount:=k;
Stringgrid1.ColCount:=k;
linda88 вне форума Ответить с цитированием
Старый 10.04.2019, 10:51   #15
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Как установка кол-ва колонок/строк стрингрида связана с передачей? А с размером? У вас же не k символов передается...
p51x вне форума Ответить с цитированием
Старый 10.04.2019, 11:00   #16
linda88
Пользователь
 
Регистрация: 17.01.2019
Сообщений: 78
По умолчанию

С передачей связана как двухмерный массив размером к*к а с передачей как
читать от 0 до Stringgrid1.RowCount:=k; и от 0 до Stringgrid1.ColCount:=k

Но если честно пока не переставляю что туда предать поэтому спрашиваю.
linda88 вне форума Ответить с цитированием
Старый 10.04.2019, 11:07   #17
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Берете чтсьый лист и ручку/карандаш. Садитесь и думаете: а что мне надо, чтобы мне сказали, чтобы я мог "таблицу" написать вот на этом листе?.. И записываете, что надумали.
p51x вне форума Ответить с цитированием
Старый 10.04.2019, 11:36   #18
linda88
Пользователь
 
Регистрация: 17.01.2019
Сообщений: 78
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Берете чтсьый лист и ручку/карандаш. Садитесь и думаете: а что мне надо, чтобы мне сказали, чтобы я мог "таблицу" написать вот на этом листе?.. И записываете, что надумали.
то что я надумала записала сообщение выше мне нужно знать размеры таблицы
Цитата:
Сообщение от linda88 Посмотреть сообщение
С передачей связана как двухмерный массив размером к*к
и значения каждого поля в цикле

Цитата:
Сообщение от linda88 Посмотреть сообщение
читать от 0 до Stringgrid1.RowCount:=k; и от 0 до Stringgrid1.ColCount:=k
[/QUOTE]
но примет ли это та запись
Код:
Stream:=TStringStream.Create('123'#13#10'321');
   Size:=Length(Stream.Bytes);
   IdTCPClient1.IOHandler.Write(Size);
   IdTCPClient1.IOHandler.Write(Stream);
эти параметры или какие параметры туда писать

Последний раз редактировалось linda88; 10.04.2019 в 11:43. Причина: не взяла код в кавычки
linda88 вне форума Ответить с цитированием
Старый 10.04.2019, 11:49   #19
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

"Примет" если вы не будете тулить стрингрид везде. У вас есть набор: размер_массива, данные и какой-нибудь разделитель. Вот и формируйте из него "массив" байтов для передачи, типа: T,2,2,2,ууу,уйй,333,222. А на принимающей стороне парсите...
p51x вне форума Ответить с цитированием
Старый 10.04.2019, 15:15   #20
linda88
Пользователь
 
Регистрация: 17.01.2019
Сообщений: 78
По умолчанию

поcкажите пожалуйста как подключиться к ADO программно по нажатию кнопки

var S:string;
S:=ExtractFilePath(application.ExeN ame);

Provider=Microsoft.Jet.OLEDB.4.0;Us er ID=Admin;Data Source=S+'BD\danie.mdb';Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;
linda88 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Передача данных сервер-клиент elf01 Общие вопросы .NET 3 11.10.2016 17:11
Передача файла сервер клиент I_am_ Win Api 1 10.12.2014 16:56
Клиент - сервер передача файлов vovik93 Общие вопросы по Java, Java SE, Kotlin 0 17.07.2012 01:06
Передача файла клиент-сервер Loveb C/C++ Сетевое программирование 2 27.05.2011 10:10