unit ZMQCase; interface {$I zmq.inc} uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, zmq, StdCtrls; type TZMQCaseFrm = class(TForm) btnReq: TButton; btnVersion: TButton; lblVersion: TLabel; mmo1: TMemo; procedure btnVersionClick(Sender: TObject); procedure btnReqClick(Sender: TObject); private procedure Rep; { Private declarations } public { Public declarations } end; var ZMQCaseFrm: TZMQCaseFrm; implementation procedure TZMQCaseFrm.btnReqClick(Sender: TObject); begin Rep; end; procedure TZMQCaseFrm.btnVersionClick(Sender: TObject); var major, minor, patch: Integer; begin zmq_version(major, minor, patch); lblVersion.Caption := Format('zmq version:%d.%d.%d', [major, minor, patch]); end; procedure TZMQCaseFrm.Rep; var context, req: Pointer; request, reply: zmq_msg_t; count: size_t; str: PChar; utf8Str: Utf8String; begin context := zmq_init(1); req := zmq_socket(context, ZMQ_REQ); zmq_setsockopt(req, ZMQ_IDENTITY, PChar('lqq'), 3); zmq_connect(req, 'tcp://192.168.1.100:11103'); while True do begin utf8Str := 'World'; count := Length(utf8Str); zmq_msg_init_size(request, count); Move(utf8Str[1], zmq_msg_data(request)^, Length(utf8Str)); zmq_sendmsg(req, request, 0); Application.HandleMessage; zmq_msg_init(reply); zmq_recvmsg(req, reply, 0); count := zmq_msg_size(reply); str := GetMemory(count); CopyMemory(str, zmq_msg_data(reply), count); mmo1.Lines.Add(string(str)); FreeMemory(str); Application.HandleMessage; zmq_msg_close(reply); zmq_msg_close(request); Sleep(500); end; zmq_close( req ); zmq_term( context ); end; {$R *.dfm} end.