如何在TIdTcpClient和TIdTcpServer之间建立一个简单的连接,以便从客户端向服务器发送字符串?

pro*_*phi 2 windows delphi indy

我使用Delphi xe6来阻止简单的客户端/服务器连接.客户端表单应具有TEdit组件,并应将Edit.text字符串发送到服务器备忘录.我想使用Indy组件:TIdTcpServer和TIdTcpClient但我不知道如何在客户端和服务器之间建立简单的连接.

我很感激你的帮助.

lin*_*luk 5

服务器:
Create,Initialize函数中的任何位置:

FIndySrv:=TIdTCPServer.Create(nil);
FIndySrv.DefaultPort:=50000;
FIndySrv.OnExecute:=DoOnIndyExecute;
FIndySrv.Active:=true;
Run Code Online (Sandbox Code Playgroud)

OnExecute:

procedure TForm1.DoOnIndyExecute(AContext: TIdContext);
var recv:string;
begin
  recv := AContext.Connection.Socket.ReadLn;
  // ...
end;
Run Code Online (Sandbox Code Playgroud)

客户:

FIndyClient:=TIdTCPClient.Create(nil);
FIndyClient.Host:='localhost';
FIndyClient.Port:=50000;
FIndyClient.Connect;
FIndyClient.Socket.WriteLn('Hallo Welt!');
Run Code Online (Sandbox Code Playgroud)

  • `TIdTCPServer`是一个多线程组件,它的`OnExecute`事件在工作线程的上下文中触发.VCL UI控件不是线程安全的,所以你不能*直接*访问`Memo1`就像你已经显示的那样.当你这样做时会发生不好的事情,包括崩溃,死锁,内存损坏,使TMemo对新消息没有响应等等.你必须*与主UI线程同步,例如`TThread.Synchronize()`或`TThread. Queue()`,或者使用Indy的`TIdSync`或`TIdNotify`类. (2认同)