Мне нужна помощь в понимании того, как передать запись через Indy TCP Server/Client. У меня 2 программы, в клиентскую ставлю и в другую серверную. На клиенте на кнопке я помещаю соединение: Клиент - TIdTCPClient
Client.Connect();
И на стороне сервера я добавляю строку в памятку, что клиент подключен, на событие ServerConnect
Protocol.Lines.Add(TimeToStr(Time)+' connected ');
Чтобы отправить данные от клиента, у меня есть запись, которую я хочу для отправки:
Tmyrecord = record
IPStr: string[15];
end;
И у меня есть кнопка отправки:
procedure Tform1.ButtonSendClick(Sender: TObject);
var
MIRec: Tmyrecord;
msRecInfo: TMemoryStream;
begin
MIRec.IPStr := '172.0.0.1';
msRecInfo := TMemoryStream.Create;
msRecInfo.Write(MIRec, SizeOf(MIRec));
msRecInfo.Position := 0;
Client.IOHandler.Write(msRecInfo);
end;
На стороне сервера onexecute у меня есть следующий код, у меня такая же запись tmyrecord объявлена на стороне сервера:
procedure TServerFrmMain.ServerExecute(AContext: TIdContext);
var
MIRec: Tmyrecord;
msRecInfo: TMemoryStream;
begin
if AContext.Connection.Connected then
begin
AContext.Connection.IOHandler.CheckForDataOnSource(10);
if not AContext.Connection.IOHandler.InputBufferIsEmpty then
begin
msRecInfo:= TMemoryStream.Create;
AContext.Connection.IOHandler.ReadStream(msRecInfo);
msRecInfo.Read(MIRec, sizeOf(msRecInfo));
ShowMessage(MIRec.IPStr);
end;
end;
end
Я не знаю, почему это не работает, почему Я не могу показать IP-адрес, который я написал со стороны клиента. Я хочу прочитать запись (msRecInfo) на стороне сервера, которую я отправляю со стороны клиента. Я хочу получить доступ к своим элементам записи, в этом случае я хочу прочитать элемент IPSTR моей записи. Когда я нажимаю кнопку отправки со стороны клиента, приложение зависает, серверная часть.
Заранее большое спасибо