sgcMQ 모든 브로커, 하나의 캐리어. 배포할 DLL은 없어요.

일곱 개의 클라이언트 컴포넌트가 MQTT 3.1.1과 5.0, AMQP 0.9.1, AMQP 1.0, Apache Kafka 와이어 프로토콜, 그리고 STOMP 1.0부터 1.2까지를 구사하고, RabbitMQ와 ActiveMQ용 브로커 방언도 제공해요. 모든 프레임을 라이브러리 안에서 Object Pascal로 파싱하고 작성하기 때문에 librdkafka도, Paho도, Qpid도, 함께 배포할 DLL도 없어요. 일곱 컴포넌트 모두 하나의 TsgcTCPClient 위에서 동작하고, 평문으로 열거나 TLS로 감쌀 수 있어요.

sgcWebSockets의 단일 패키지예요. 가격 보기 →
  • MQTT 3.1.1 & 5.0
  • AMQP 0.9.1
  • AMQP 1.0
  • Apache Kafka
  • STOMP 1.0부터 1.2까지
  • Delphi 7부터 13까지
  • C++ Builder
  • 7팔레트 한 페이지에 모인 클라이언트 컴포넌트
  • 5프로토콜 제품군, 각각 Object Pascal로 파싱해요
  • 6타깃: Win32, Win64, Linux64, macOS, iOS, Android
  • 0외부 라이브러리: librdkafka도, Paho도, Qpid도, DLL도 없어요
  • 1일곱 컴포넌트 모두를 위한 전송 캐리어
하나의 API 스타일

프로토콜마다 컴포넌트 하나, 일곱 개 모두 같은 모양

폼에 프로토콜 컴포넌트를 올리고, Client 속성에 TsgcTCPClient를 할당하고, 이벤트를 연결한 다음, 해당 프로토콜 고유의 동사를 호출하면 돼요. 일곱 컴포넌트 모두 이름 규칙이 일관되어서 하나를 익히면 나머지는 대부분 저절로 따라와요.

모든 브로커에 하나의 패턴: Client 속성으로 프로토콜 컴포넌트에 연결된 TsgcTCPClient, 평문 TCP 또는 TLS

TCP 클라이언트와 프로토콜 컴포넌트

TsgcTCPClient가 소켓, 호스트, 포트를 맡아요. 프로토콜 컴포넌트는 Client 속성으로 연결되어 그 위에서 MQTT, AMQP, Kafka, STOMP를 구사해요. 평문 리스너에서 암호화된 리스너로 바꾸는 데 필요한 건 포트 번호와 캐리어의 TLS := True뿐이고, 그 위의 코드는 아무것도 바뀌지 않아요.

MQTT 브로커에 연결하기: Delphi 코드와 나란히 보이는 CONNECT 및 CONNACK 교환

몇 줄이면 연결 끝

캐리어가 브로커를 가리키게 하고, TsgcWSPClient_MQTT를 연결하고, MQTTVersion 속성 하나로 버전 5 또는 3.1.1을 고른 다음 Active를 True로 설정하세요. 연결은 이게 전부예요.

PUBLISH, PUBACK, PUBREC, PUBREL, PUBCOMP 교환과 함께 보는 MQTT 서비스 품질 0, 1, 2

QoS 메커니즘 전체를 이벤트로 노출해요

QoS 0, 1, 2의 PUBACK, PUBREC, PUBREL, PUBCOMP 교환은 숨겨지지 않고 이벤트로 노출돼요. 보존 메시지, Last Will and Testament, 와일드카드 구독, 재개 가능한 세션도 함께 제공돼요.

TCP 클라이언트의 운영 환경 설정: WatchDog, HeartBeat, TLS, 그리고 프로토콜 컴포넌트의 인증

운영 환경 설정은 캐리어에 있어요

WatchDog는 끊어진 연결을 다시 이어 주고, 하트비트는 연결을 유지하며, TLS는 암호화해요. 이 설정들은 TCP 클라이언트에 있으므로 어떤 프로토콜이 위에서 동작하든 한 번만 설정하면 돼요. 인증은 프로토콜 컴포넌트 자체에 속해요.

직접 확인하기

Delphi에서 몇 분 만에 발행하고 구독하기

해설과 자막이 함께 제공되는 퀵스타트예요. 모든 브로커에 통하는 하나의 패턴, MQTT 연결, 토픽과 서비스 품질, 그리고 운영 환경에서 중요한 설정을 다뤄요. 재생 버튼을 누르기 전에는 아무것도 내려받지 않아요.

sgcMQ 퀵스타트

Delphi에서 브로커에 연결하고, 토픽 필터를 구독하고, 메시지를 발행해요.

  1. 하나의 패턴, 모든 브로커소켓, 호스트, 포트를 맡는 TCP 클라이언트를 만든 다음, Client 속성으로 프로토콜 컴포넌트를 연결해요.
  2. MQTT 브로커에 연결하기TCP 클라이언트가 브로커를 가리키게 하고, MQTT 컴포넌트를 연결하고, 버전 5 또는 3.1.1을 고른 다음 Active를 True로 설정해요.
  3. 구독과 발행Subscribe는 토픽 필터와 QoS를 받아요. Publish는 토픽, 페이로드, QoS, 보존 플래그를 받아요. 메시지는 OnMQTTPublish로 도착해요.
  4. 다른 브로커도 같은 패턴익스체인지, 큐, 채널을 갖춘 AMQP 0.9.1, AMQP 1.0, RabbitMQ와 ActiveMQ 변형을 갖춘 STOMP, 그리고 컨슈머 그룹과 오프셋을 갖춘 Kafka예요.
  5. 운영 환경 준비 완료WatchDog, 하트비트, TLS는 TCP 클라이언트에서, 인증은 프로토콜 컴포넌트에서 설정해요.
일곱 가지 컴포넌트

다섯 개의 프로토콜 제품군을 네이티브로 구현했어요

sgcMQ는 벤더 SDK를 감싸는 대신 공개된 프로토콜을 직접 구현하고, 모든 라이선스에 전체 소스 코드가 포함되어 있어서 프로토콜 구현을 여러분의 디버거로 한 줄씩 따라갈 수 있어요.

MQTT 3.1.1 & 5.0

TsgcWSPClient_MQTT는 MQTTVersion 속성 하나로 두 프로토콜 버전을 모두 다뤄요. QoS 0, 1, 2, 보존 메시지, Last Will and Testament, 와일드카드 구독, 재개 가능한 세션을 지원해요. 버전 5에서는 이유 코드, 사용자 속성, 토픽 별칭, 공유 구독, AUTH 왕복이 더해져요.

MQTT 클라이언트 보기 →

AMQP 0.9.1

TsgcWSPClient_AMQP는 RabbitMQ의 기반이 된 프로토콜을 구사해요. 채널, 익스체인지와 큐 선언, 바인딩, 컨슈머, 발행자 확인 응답, prefetch QoS, 트랜잭션을 다뤄요.

AMQP 0.9.1 클라이언트 보기 →

AMQP 1.0

TsgcWSPClient_AMQP1은 Azure Service Bus와 Event Hubs 뒤에 있는 OASIS 표준을 구사해요. 컨테이너, 세션, 송신 및 수신 링크, 크레딧 기반 흐름 제어, SASL, Claims-Based Security 헬퍼를 제공해요. 와이어 포맷도 객체 모델도 다르기 때문에 별도의 컴포넌트로 제공돼요.

AMQP 1.0 클라이언트 보기 →

Apache Kafka

TsgcWSPClient_Kafka는 v2 레코드 배치 포맷을 포함해 Kafka 바이너리 프로토콜을 TCP 위에서 직접 구사해요. 원하는 acks 수준과 gzip 압축으로 프로듀스하고, 코디네이터 검색, 조인, 동기화, 하트비트, 리밸런스를 알아서 처리해 주는 그룹으로 컨슘하거나, 오프셋으로 파티션을 읽을 수 있어요.

Kafka 클라이언트 보기 →

STOMP 1.0부터 1.2까지

TsgcWSPClient_STOMP는 SEND, SUBSCRIBE, UNSUBSCRIBE, ACK, NACK, 수신 확인, 양방향 하트비트, 그리고 BEGIN, COMMIT, ABORT 트랜잭션 프레임을 처리해요. 두 개의 하위 컴포넌트는 브로커의 목적지 규칙을 이름 있는 메서드로 바꿔 주는데, 하나는 RabbitMQ용, 하나는 ActiveMQ용이에요.

STOMP 클라이언트 보기 →

여섯 개의 타깃, 예외 조항 없음

일곱 개의 클라이언트와 그 아래의 캐리어 모두 Delphi 7부터 RAD Studio 13까지, 그리고 C++ Builder에서 Win32, Win64, Linux64, macOS, iOS, Android용으로 등록돼요. 이 메시징 패키지에는 플랫폼 제한이 없어요.

기능 매트릭스 →
코드

네 가지 프로토콜, 똑같은 모양

프로토콜 컴포넌트를 만들고, 캐리어를 할당하고, 이벤트를 연결하고, 동사를 호출하면 돼요. 평문 리스너에서 암호화된 리스너로 바꾸는 데 필요한 건 포트 번호와 캐리어의 TLS := True뿐이고, 그 위의 코드는 아무것도 바뀌지 않아요.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols;
var
  TCPClient: TsgcTCPClient;
  MQTT: TsgcWSPClient_MQTT;
begin
  TCPClient := TsgcTCPClient.Create(nil);   // plain MQTT over TCP
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 1883;
  TCPClient.WatchDog.Enabled := True;

  MQTT := TsgcWSPClient_MQTT.Create(nil);
  MQTT.Client := TCPClient;
  MQTT.MQTTVersion := mqtt5;
  MQTT.Authentication.Enabled  := True;
  MQTT.Authentication.UserName := 'sgc';
  MQTT.Authentication.Password := 'sgc';

  MQTT.LastWillTestament.Enabled := True;
  MQTT.LastWillTestament.Topic   := 'devices/sensor-01/status';
  MQTT.LastWillTestament.Message := 'offline';
  MQTT.LastWillTestament.QoS     := mtqsAtLeastOnce;
  MQTT.LastWillTestament.Retain  := True;

  MQTT.OnMQTTConnect := MQTTConnect;
  MQTT.OnMQTTPublish := MQTTPublish;

  TCPClient.Active := True;
end;

procedure TForm1.MQTTConnect(Connection: TsgcWSConnection;
  const Session: Boolean; const ReasonCode: Integer;
  const ReasonName: string;
  const ConnectProperties: TsgcWSMQTTCONNACKProperties);
begin
  MQTT.Subscribe('sensors/+/temperature', mtqsAtLeastOnce);
end;

procedure TForm1.MQTTPublish(Connection: TsgcWSConnection;
  aTopic, aText: string;
  PublishProperties: TsgcWSMQTTPublishProperties);
begin
  Memo1.Lines.Add(aTopic + ' = ' + aText);
end;

// For an encrypted broker: same code, TLS on the carrier.
// TCPClient.Port := 8883; TCPClient.TLS := True;
uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols, sgcAMQP_Classes;
var
  TCPClient: TsgcTCPClient;
  AMQP: TsgcWSPClient_AMQP;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 5672;                  // 5671 for the amqps listener

  AMQP := TsgcWSPClient_AMQP.Create(nil);
  AMQP.Client := TCPClient;
  AMQP.AMQPOptions.VirtualHost := '/';
  AMQP.HeartBeat.Enabled  := True;
  AMQP.HeartBeat.Interval := 30;

  AMQP.OnAMQPConnect      := AMQPConnect;
  AMQP.OnAMQPBasicDeliver := AMQPBasicDeliver;

  TCPClient.Active := True;
end;

procedure TForm1.AMQPConnect(Sender: TObject);
begin
  AMQP.OpenChannel('ch1');
  AMQP.DeclareExchange('ch1', 'orders', 'direct');
  AMQP.DeclareQueue('ch1', 'orders_in');
  AMQP.BindQueue('ch1', 'orders_in', 'orders', 'create');
  AMQP.Consume('ch1', 'orders_in');

  // Publish to the exchange with a routing key
  AMQP.PublishMessage('ch1', 'orders', 'create', '{"id":42}');
end;
uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols, sgcKafka_Classes;
var
  TCPClient: TsgcTCPClient;
  Kafka: TsgcWSPClient_Kafka;
begin
  Kafka := TsgcWSPClient_Kafka.Create(nil);
  Kafka.KafkaOptions.ClientId := 'my-delphi-app';
  Kafka.KafkaOptions.Producer.Acks        := kafkaAcksLeader;
  Kafka.KafkaOptions.Producer.Compression := kafkaCompressionGzip;
  Kafka.KafkaOptions.Consumer.GroupId     := 'my-group';
  Kafka.KafkaOptions.Consumer.OffsetReset := kafkaOffsetEarliest;
  Kafka.OnKafkaMessage := KafkaMessage;

  TCPClient := TsgcTCPClient.Create(nil);
  Kafka.Client := TCPClient;
  TCPClient.Host := '127.0.0.1';
  TCPClient.Port := 9092;
  TCPClient.Active := True;

  // produce a record to a topic
  Kafka.Produce('my-topic', 'Hello Kafka', 'key-1');

  // consume: subscribe once, then Poll repeatedly (e.g. from a timer)
  Kafka.Subscribe(['my-topic']);
end;

procedure TForm1.KafkaMessage(Sender: TObject;
  const Message: TsgcKafkaMessage);
begin
  Memo1.Lines.Add(Message.GetKeyString + ' = ' + Message.GetValueString);
end;

// fetch records from a timer, commit when a batch is processed
var
  Messages: TsgcKafkaMessages;
begin
  Messages := Kafka.Poll(1000);
  try
    if Messages.Count > 0 then
      Kafka.CommitSync;
  finally
    Messages.Free;
  end;
end;
uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Broker_Client,
  sgcWebSocket_Protocol_STOMP_RabbitMQ_Client;
var
  TCPClient: TsgcTCPClient;
  STOMP: TsgcWSPClient_STOMP_RabbitMQ;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'rabbit.example.com';
  TCPClient.Port := 61613;             // 61614 for the plugin's TLS listener

  STOMP := TsgcWSPClient_STOMP_RabbitMQ.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';

  STOMP.OnRabbitMQConnected := RabbitMQConnected;
  STOMP.OnRabbitMQMessage   := RabbitMQMessage;

  TCPClient.Active := True;
end;

procedure TForm1.RabbitMQConnected(Connection: TsgcWSConnection;
  Headers: TsgcWSRabbitMQSTOMPHeadersConnected);
begin
  // /queue/orders
  STOMP.SubscribeQueue('orders');
  STOMP.PublishQueue('orders', '{"orderId":12345}');
end;

procedure TForm1.RabbitMQMessage(Connection: TsgcWSConnection;
  MessageText: string; Headers: TsgcWSRabbitMQSTOMPHeadersMessage;
  Subscription: TsgcWSBrokerSTOMPSubscriptionItem);
begin
  Memo1.Lines.Add(Headers.Destination + ': ' + MessageText);
end;
  1. 프로토콜 컴포넌트를 만드세요프로토콜마다 컴포넌트가 하나씩 있어요: MQTT, AMQP 0.9.1, AMQP 1.0, Kafka, STOMP, RabbitMQ용 STOMP, ActiveMQ용 STOMP.
  2. 캐리어를 할당하세요Client 속성을 브로커의 호스트와 포트를 가진 TsgcTCPClient로 설정해요. TLS, 프록시, 재연결은 거기에서 한 번만 설정해요.
  3. 이벤트를 연결하세요연결, 메시지, 확인 응답 이벤트가 컴포넌트에 도착하며, 프로토콜 고유의 속성이 함께 전달돼요.
  4. 동사를 호출하세요Subscribe와 Publish, DeclareQueue와 Consume, Produce와 Poll, SubscribeQueue와 PublishQueue처럼 프로토콜이 이미 쓰는 이름 그대로예요.

Object Pascal에서도 C++ Builder에서도 똑같은 모양이고, 나머지 세 컴포넌트도 같은 모양이에요. 전체 기능 매트릭스 →

구매 전에

먼저 알아 두면 좋은 두 가지

sgcMQ가 여러분에게 필요로 하는 것과 바이트가 브로커에 도달하는 방식이에요. 두 답 모두 짧고, 깨알 같은 약관이 아니라 바로 이 페이지에 있어요.

네이티브 브로커 리스너
protocol            component                       TCP     TLS
MQTT 3.1.1 / 5.0    TsgcWSPClient_MQTT             1883    8883
AMQP 0.9.1          TsgcWSPClient_AMQP             5672    5671
AMQP 1.0            TsgcWSPClient_AMQP1            5672    5671
Apache Kafka        TsgcWSPClient_Kafka            9092       *
STOMP               TsgcWSPClient_STOMP           61613       *
STOMP, RabbitMQ     TsgcWSPClient_STOMP_RabbitMQ  61613   61614
STOMP, ActiveMQ     TsgcWSPClient_STOMP_ActiveMQ  61613   61612

* 브로커 자체의 암호화 리스너에 설정된 값이 무엇이든 따라요.
  이 값들은 일반적인 기본값이에요. 캐리어의 Port에는
  실제 배포 환경이 수신하는 포트를 넣으면 돼요.

sgcMQ는 단독 제품이에요

컴포넌트에 필요한 모든 것이 sgcMQ 안에 들어 있어요. sgcWebSockets Core 런타임, TsgcTCPClient 캐리어, TLS 계층, JSON 헬퍼까지요. 설치 프로그램 하나에 전체 소스 코드가 함께 담겨 있어요.

평문 TCP와 TLS, 오직 그것만

이 패키지의 모든 프로토콜은 평문으로 열거나 TLS로 감싼 원시 소켓 위에서 동작해요. MQTT, AMQP, Kafka, STOMP가 일반적으로 배포되는 방식이에요. 프로토콜을 WebSocket 위에서 실행하려면, 예를 들어 MQTT over WebSocket이나 Web-STOMP라면 WebSocket 클라이언트가 필요한데, 이는 sgcWebSockets와 함께 제공돼요. 선택하기 전에 브로커가 어떤 전송을 노출하는지 확인해 보세요.

Delphi와 C++ Builder

sgcMQ는 Delphi 7부터 RAD Studio 13까지, 그리고 C++ Builder를 여섯 개 플랫폼 모두에서 지원해요. 이 패키지에는 .NET 빌드가 없어요. .NET에서 메시징이 필요하다면 sgcWebSockets에 들어 있어요.

배관 작업은 캐리어가 해요

TLSOptions.IOHandler로 크로스플랫폼 빌드에는 OpenSSL을, Windows에서는 SChannel을 선택하고, WatchDog가 끊어진 연결을 다시 이어 주며, HTTP CONNECT 프록시 통과와 IPv6는 별도 설정이 필요 없어요. 한 번만 설정하면 그 위의 모든 프로토콜이 그대로 물려받아요.

sgcMQ는 벤더 SDK를 감싸는 대신 공개된 프로토콜을 직접 구현하기 때문에 브로커는 여러분이 선택하면 돼요. RabbitMQ, Apache Kafka, Eclipse Mosquitto, HiveMQ, EMQX, Apache ActiveMQ, Azure Service Bus와 Event Hubs, AWS IoT Core 모두 가능해요. 브로커를 바꾸는 데 필요한 건 호스트, 포트, 자격 증명뿐이에요.

sgcWebSockets의 일부

sgcWebSockets의 단일 패키지, 별도로 라이선스돼요

sgcMQ는 기반이 되는 sgcWebSockets Core 런타임을 함께 제공하므로 다른 eSeGeCe 라이선스가 필요 없어요. 모든 라이선스에 전체 소스 코드와 여섯 개 타깃 모두에서의 로열티 없는 배포가 포함돼요.

Single

개발자 1인 라이선스예요. 한 번에 한 대의 컴퓨터에서 사용해요.

€249

Team

개발자 2인 라이선스예요. 한 번에 두 대의 컴퓨터에서 사용해요.

€399

Site

무제한 개발자예요. 회사의 모든 컴퓨터에서 사용해요.

€649

Delphi와 C++ Builder를 위한 MQTT, AMQP 0.9.1과 1.0, Apache Kafka, STOMP 클라이언트 컴포넌트이며 sgcWebSockets Core 런타임이 함께 제공돼요. WebSocket 전송이나 .NET도 필요하신가요? 그것들은 sgcWebSockets와 함께 제공돼요.

가격 및 라이선스 보기
고객 후기

개발자들의 평가

전 세계의 Delphi, C++ Builder, Lazarus 및 .NET 개발자가 신뢰해요.

sgcWebSockets 라이브러리는 정말 유용하고 설정하기 쉬워요. 앞으로도 좋은 작업 부탁드려요!
Simone Moretti Delphi 개발자
sgcWebSockets는 정말 훌륭하고 지원도 최고예요!
Christian Meyer 창립자 및 CTO
도움과 지원에 정말 감사드려요. 컴포넌트가 너무 마음에 들어요.
Mark Steinfeld CTO

Delphi에서 브로커와 대화하세요

MQTT, AMQP, Kafka, STOMP를 하나의 패키지에서 네이티브로 구현했고, sgcWebSockets Core 런타임과 전체 소스 코드가 함께 제공돼요. 같은 코드로 Windows, Linux, macOS, iOS, Android를 지원해요.

eSeGeCe의 다른 제품

eSeGeCe의 다른 제품

sgcMQ는 Delphi, C++ Builder, .NET을 위한 다른 eSeGeCe 컴포넌트 라이브러리와 같은 규칙을 공유해요. 전체 소스와 함께 제공되고, 로열티 없이 배포할 수 있어요.

sgcWebSockets

Delphi, C++ Builder, Lazarus, .NET을 위한 WebSocket, HTTP/2, MQTT, AMQP, WebRTC, AI 및 30개 이상의 API 통합이에요. WebSocket 캐리어는 이 제품에 들어 있어요.

sgcAuth

Delphi와 C++ Builder를 위한 OAuth2 클라이언트, JWT 클라이언트, WebAuthn 지원이에요. 단독 제품이며 sgcWebSockets Core 런타임이 함께 제공돼요.

sgcHTTP

Delphi와 C++ Builder를 위한 HTTP 서버, HTTP/2 클라이언트, gRPC 클라이언트, Google Cloud Pub/Sub, Calendar, FCM 클라이언트예요. 단독 제품이며 sgcWebSockets Core 런타임이 함께 제공돼요.

sgcREST

Delphi와 C++ Builder를 위한 REST 서버, OpenAPI 서버, OpenAPI 클라이언트 컴포넌트예요. 단독 제품이며 sgcWebSockets Core 런타임이 함께 제공돼요.

sgcAI

Delphi와 C++ Builder를 위한 AI, LLM, MCP 컴포넌트예요. 컴포넌트 하나로 일곱 개 LLM 제공업체를 사용하고, MCP와 임베딩, 음성까지 지원해요. 단독 제품이며 sgcWebSockets Core 런타임이 함께 제공돼요.

sgcHTML

Bootstrap 5와 htmx 기반의 서버 사이드 HTML 및 UI 컴포넌트예요. sgcMQ가 소비하는 큐 앞에 라이브 대시보드를 세워 보세요.

sgcQUIC

원시 QUIC 전송과 HTTP/3 클라이언트 및 서버, 그리고 WebTransport를 제공해요. sgcWebSockets Enterprise의 애드온이에요.

sgcOpenAPI

OpenAPI 3.x 파서, 네이티브 Pascal SDK 생성기, OpenAPI 서버 컴포넌트, 그리고 1,195개 이상의 사전 빌드 클라우드 SDK를 제공해요.

sgcSign

문서에는 XAdES, PAdES, CAdES, ASiC를, 코드에는 Authenticode, ClickOnce, NuGet, VSIX를 제공해요.

sgcPDF

PDF 파일을 만들고, 편집하고, 보고, 서명하고, 가리고, 검증하는 기능을 순수 Object Pascal로 제공해요. 배포할 DLL이 없고, 별도로 라이선스돼요.

sgcBiometrics

Delphi와 C++ Builder를 위한 Windows Hello, 지문 센서, Windows Biometric Framework를 제공해요.

sgcIndy

Delphi 7부터 13까지 최신 TLS, IPv6, HTTP/2를 갖춘 업데이트된 Indy TCP/IP 컴포넌트예요.

블로그 최신 소식

모든 글 보기 →

지금 eSeGeCe의 sgcMQ 관점을 보고 있어요.

다른 관점 보기 →
30일 환불 보장만족하지 않으세요? 구매 후 30일 이내에 전액 환불을 요청하세요. 환불 정책 보기