09/12/2021 (Versi 3.1)
25/05/2021 (Versi 3.0)
13/03/2021 (Versi 2.6)
02/01/2021 (Versi 2.5)
18/12/2020 (Versi 2.4)
28/11/2020
31/10/2020 (Versi 2.3)
27/10/2020 (Versi 2.2)
26/10/2020 (Versi 2.1)
10/09/2020
10/06/2020
24/09/2020
16/07/2020
07/12/2020
05/03/2020
19/04/2020
31/03/2019
Komponen ini memungkinkan Anda membangun komunikasi asinkron TCP Socket antar komputer di jaringan LAN atau Internet.
DzTCPServer dan DzTCPClient menggunakan TClientSocket dan TServerSocket dari unit System.Win.ScktComp. Kelas-kelas ini tersedia di Delphi, tetapi agak sulit untuk diterapkan karena Anda perlu membaca dan menulis data buffer dan tidak banyak sumber daya yang tersedia.
Penggunaannya sangat sederhana. Anda harus meletakkan komponen server di aplikasi sisi server dan komponen klien di aplikasi sisi klien dan mulai mengkodekan pesan perintah.
Anda dapat melakukan banyak hal, seperti aplikasi obrolan, aplikasi perintah jarak jauh, aplikasi pemantauan jarak jauh, dan bahkan mengirim aliran seperti file. Langit adalah batasnya.
Struktur cache : Bila Anda menggunakan komponen soket asli Delphi, Jika Anda mengirim beberapa pesan secara bersamaan, penerima mungkin menerima pesan yang dikelompokkan atau dibagi, jadi Anda harus selalu mengatasi masalah ini. DzSocket mengontrol pesan soket secara otomatis, sehingga Anda selalu menerima satu peristiwa per pesan.
KeepAlive : Saat Anda membuat koneksi soket, jika satu sisi koneksi terputus, sisi lainnya tidak akan dikomunikasikan hingga ada pesan baru yang mencoba dikirim. Jadi Anda bisa menerapkan ping manual, tapi ini akan memberikan banyak pekerjaan yang tidak perlu. DzSocket memiliki sumber daya KeepAlive, yang memungkinkan protokol tetap hidup asli jaringan.
Perintah : Soket asli memungkinkan Anda mengirim segmen string, tetapi jika Anda ingin mengirim perintah dan mengidentifikasi perintah ini di sisi lain koneksi, Anda perlu menerapkannya secara manual. Dengan DzSocket , Anda memiliki perintah Char yang selalu tersedia. Siap, cepat dan mudah.
Objek Data Bebas Otomatis di Server : Daftar objek Klien yang tersedia di komponen Server memiliki properti Pointer, yang memungkinkan Anda menyimpan informasi tentang koneksi klien, biasanya menggunakan objek. Dengan DzSocket , Anda tidak perlu khawatir dengan kerusakan objek ini. Anda hanya perlu mengaktifkan properti untuk menangani objek-objek ini.
Enumerator : Komponen Server asli tidak memiliki enumerator untuk mengulangi koneksi Daftar Klien. Dengan menggunakan DzSocket , Anda cukup melakukan for .. in
langsung pada komponen Server, mengulangi koneksi daftar klien.
SendAll : Mengirim perintah dengan mudah ke semua klien. Selain itu, Anda dapat menggunakan SendAllEx
untuk mengirim perintah ke semua klien kecuali koneksi klien tertentu.
Connection Monitor : Terdapat event Connection Lost yang memungkinkan Anda mengetahui kapan koneksi ditutup tanpa permintaan klien.
Dukungan Unicode : Komponen asli Delphi tidak mendukung pengiriman pesan menggunakan string Unicode, kecuali Anda menulis kode Anda sendiri untuk mengkonversi aliran data di kedua sisi. Ini sungguh membosankan dan memerlukan waktu. Dengan menggunakan DzSocket Anda cukup mengirim teks pesan menggunakan parameter metode langsung sebagai tipe string, sehingga Delphi akan menganggap karakter Unicode sebagai WideString secara default.
Kontrol login : Anda dapat mengontrol otentikasi/otorisasi klien dengan menggunakan peristiwa sederhana dan Anda dapat mengirim informasi data tambahan untuk mengontrol akses klien ke server.
Koneksi Ulang Otomatis : Komponen klien dapat menyambung kembali secara otomatis ke server ketika koneksi terputus, hanya dengan mengaktifkan properti.
Dan masih banyak lagi!
Mendukung Delphi XE3..Delphi 11
AutoFreeObjs: Boolean
(publik) = Jika Anda menggunakan properti Data
soket klien di server untuk menetapkan objek, Anda dapat mengaktifkan opsi ini, sehingga komponen akan menangani penghancuran objek ketika soket klien berakhir. Ingat, jika opsi ini diaktifkan dan properti Data pada soket ditetapkan, komponen akan selalu menganggap Data sebagai objek.
EnumeratorOnlyAuth: Boolean
(publik) = Saat menggunakan enumerator komponen for in
, klien bypass belum diautentikasi.
KeepAlive: Boolean
= Izinkan pengaktifan sumber daya asli soket KeepAlive. Ini akan mengirimkan sinyal tetap hidup menggunakan properti KeepAliveInterval.
KeepAliveInterval: Integer
= Menentukan interval KeepAlive dalam milidetik (default 15000/15 detik ).
Port: Word
= Menentukan Server mendengarkan Port TCP. Properti ini diperlukan untuk memulai soket server.
Connection[Index: Integer]: T DzSocket
(publik) = Mengembalikan objek koneksi klien T DzSocket berdasarkan Indeks.
Count: Integer
(publik) = Mengembalikan jumlah daftar koneksi klien.
procedure OnClientConnect (Sender: TObject; Socket: T DzSocket );
Peristiwa ini dipicu ketika klien terhubung ke server. Parameter Socket
adalah soket klien.
procedure OnClientDisconnect (Sender: TObject; Socket: T DzSocket );
Peristiwa ini dipicu ketika klien terputus dari server. Parameter Socket
adalah soket klien.
procedure OnClientError (Sender: TObject; Socket: T DzSocket ;
const Event: TErrorEvent; const ErrorCode: Integer; const ErrorMsg: string);
Peristiwa ini dipicu ketika terjadi kesalahan pada koneksi klien. Parameter Socket
adalah soket klien.
procedure OnClientRead (Sender: TObject; Socket: T DzSocket ;
const Cmd: Char; const A: string);
Peristiwa ini dipicu ketika klien mengirimkan pesan ke server. Parameter Socket
adalah soket klien.
procedure OnClientLoginCheck (Sender: TObject; Socket: T DzSocket ; var Accept: Boolean;
const RequestData: String; var ResponseData: String);
Peristiwa ini dipicu ketika klien baru saja terhubung ke server. Jika di sisi klien, OnLoginRequest
ditangani, informasi data yang dikirim akan diterima di sini ke dalam parameter RequestData
. Anda dapat mengubah parameter Accept
(nilai default awal adalah True) untuk menerima atau menolak koneksi klien. Selain itu, Anda dapat menggunakan parameter ResponseData
untuk mengirimkan beberapa informasi data ke klien. Bendera dan informasi data yang diterima akan diterima oleh klien di acara OnLoginResponse
. Jika parameter Accept
tetap True, maka properti socket Auth
akan disetel ke True. Jika tidak, koneksi klien akan terputus oleh server.
procedure OnClientLoginSuccess (Sender: TObject; Socket: T DzSocket );
Peristiwa ini dipicu tepat setelah klien diotorisasi ke server. Bahkan jika Anda tidak menggunakan acara login, ingat: hanya setelah klien diotorisasi ke server, maka klien dapat mengirim pesan. Jika tidak, server akan mengabaikan pesan klien apa pun.
procedure Open ;
Nyalakan port soket pendengar server.
procedure Close ;
Matikan port soket mendengarkan server.
procedure Lock ;
procedure Unlock ;
Gunakan metode ini untuk mengulangi daftar Koneksi (aman untuk thread), karena koneksi mungkin ditutup ketika Anda mengulangi daftar koneksi.
Contoh:
var CSock: T DzSocket ;
begin
Server.Lock;
try
for CSock in Server do
begin
// ...
end ;
finally
Server.Unlock;
end ;
end ;
Selain itu, komponen TDzTCPServer memiliki enumerator default yang menunjuk ke Daftar Koneksi, sehingga menghasilkan objek T DzSocket . Jadi Anda dapat mengulangi daftar koneksi menggunakan pernyataan
for .. in
, seperti contoh sebelumnya.
procedure Send (Socket: T DzSocket ; const Cmd: Char; const A: String = ' ' );
Mengirim perintah dan pesan ke soket klien yang ditentukan oleh parameter Socket
. Anda harus menggunakan parameter Cmd
untuk menentukan karakter perintah, yang akan diterima oleh klien. Parameter A
bersifat opsional dan memungkinkan Anda menentukan teks pesan.
procedure SendAll ( const Cmd: Char; const A: String = ' ' );
Kirim pesan ke semua klien yang diautentikasi.
procedure SendAllEx (Exclude: T DzSocket ; const Cmd: Char; const A: String = ' ' );
Kirim pesan ke semua klien yang diautentikasi, kecuali ke klien yang ditentukan oleh parameter Exclude
.
function FindSocketHandle ( const ID: TSocket): T DzSocket ;
Mengembalikan objek T DzSocket dengan Socket Handle ID.
function GetAuthConnections : Integer;
Hanya mengambil jumlah koneksi yang diautentikasi.
AutoReconnect: Boolean
= Jika diaktifkan, ketika klien kehilangan koneksi ke server, soket akan mencoba menyambung kembali secara otomatis.
AutoReconnectInterval: Integer
= Menentukan waktu dalam milidetik untuk menunggu upaya penyambungan ulang yang baru (default 10000 / 10 detik ).
AutoReconnectAttempts: Integer
= Berapa kali mencoba menyambung kembali setelah koneksi terputus. Tinggalkan nilai 0
untuk mencoba lagi tanpa batas.
KeepAlive: Boolean
= Izinkan pengaktifan sumber daya asli soket KeepAlive. Ini akan mengirimkan sinyal tetap hidup menggunakan properti KeepAliveInterval.
KeepAliveInterval: Integer
= Menentukan interval KeepAlive dalam milidetik (default 15000/15 detik ).
Host: String
= Menentukan IP atau Nama Host (DNS) untuk terhubung ke server. Properti ini diperlukan untuk terhubung ke soket server.
Port: Word
= Menentukan koneksi Klien Port TCP, yang didengarkan server atau port yang dipetakan. Properti ini diperlukan untuk terhubung ke soket server.
Connected: Boolean
(publik) = Mengembalikan nilai benar jika koneksi dibuat.
SocketHandle: TSocket
(public) = Mengembalikan ID Socket Handle koneksi.
procedure OnConnect (Sender: TObject; Socket: T DzSocket );
Peristiwa ini dipicu ketika klien membuat koneksi ke server.
procedure OnConnectionLost (Sender: TObject; Socket: T DzSocket );
Peristiwa ini dipicu ketika koneksi terputus antara klien dan server. Hal ini akan terjadi jika klien mendeteksi bahwa koneksi ditutup tanpa perintah putuskan sambungan oleh klien itu sendiri.
procedure OnDisconnect (Sender: TObject; Socket: T DzSocket ;
const WasConnected: Boolean);
Peristiwa ini dipicu ketika klien terputus dari server, meskipun koneksi terputus. WasConnected
memungkinkan Anda mengetahui apakah peristiwa OnDisconnect berasal dari koneksi yang dibuat, karena peristiwa ini akan diaktifkan meskipun Anda mencoba menyambung dan koneksi tidak berhasil dibuat.
procedure OnError (Sender: TObject; Socket: T DzSocket ;
const Event: TErrorEvent; const ErrorCode: Integer; const ErrorMsg: string);
Peristiwa ini dipicu ketika terjadi kesalahan pada koneksi klien. Selalu disarankan untuk menyetel peristiwa ini, jika tidak, komponen akan memunculkan kesalahan asinkron yang tidak terkontrol.
procedure OnRead (Sender: TObject; Socket: T DzSocket ;
const Cmd: Char; const A: string);
Peristiwa ini dipicu ketika klien menerima pesan dari server.
procedure OnLoginRequest (Sender: TObject; Socket: T DzSocket ; var Data: String);
Peristiwa ini dipicu tepat setelah klien terhubung ke server. Artinya server meminta informasi data login, sehingga dapat memeriksa data ini dan memilih menerima atau memutuskan koneksi klien. Anda harus mengisi parameter Data
jika Anda ingin menangani informasi ini di server.
procedure OnLoginResponse (Sender: TObject; Socket: T DzSocket ; Accepted: Boolean; const Data: String)
Peristiwa ini dipicu ketika server menerima atau menolak koneksi klien. Anda dapat memeriksa hasil ini ke dalam parameter Accepted
, dan server dapat mengirimkan beberapa informasi data ke klien ke dalam parameter Data
.
procedure OnReconnection (Sender: TObject; Socket: T DzSocket ; Attempt: Integer; Cancel: Boolean)
Terjadi ketika properti AutoReconnect
diaktifkan dan koneksi terputus, setelah milidetik AutoReconnectInterval
. Jika upaya untuk menyambung kembali gagal, kejadian tersebut akan dipicu secara berturut-turut hingga sambungan dibuat. Anda dapat membatalkan upaya penyambungan ulang dengan mengubah properti Cancel
menjadi True
pada peristiwa penyambungan ulang, atau memanggil metode StopReconnection
.
procedure Connect ;
Terhubung ke server.
procedure Disconnect ;
Terputus dari server.
procedure StopReconnection ;
Menghentikan upaya penyambungan ulang ketika AutoReconnect
diaktifkan dan sambungan terputus.
procedure Send ( const Cmd: Char; const A: String = ' ' );
Mengirim perintah dan pesan ke server. Anda harus menggunakan parameter Cmd
untuk menentukan karakter perintah yang akan diterima oleh server. Parameter A
bersifat opsional dan memungkinkan Anda menentukan teks pesan.
Penting: Server tidak akan menerima pesan saat klien masih belum diautentikasi, meskipun sudah terhubung.
Hanya tersedia di Delphi XE6 atau lebih tinggi
Saat Anda menggunakan metode Send
dari soket Server atau Klien, ada parameter String
yang memungkinkan Anda mengirim data. Ada dua metode global yang dapat Anda gunakan untuk mengirim banyak data sekaligus:
type TMsgArray = TArray<Variant>;
function ArrayToData ( const Fields: TMsgArray): String;
function DataToArray ( const Data: String): TMsgArray;
Pengirim:
var
I: Integer;
S: String;
begin
I := 123 ;
S := ' Test ' ;
DzTCPClientTest.Send( ' M ' , ArrayToData([I, S]));
end ;
Penerima:
procedure DzTCPServerTestClientRead (Sender: TObject; Socket: T DzSocket ;
const Cmd: Char; const A: string);
var MsgArray: TMsgArray;
begin
MsgArray := DataToArray(A);
ShowMessage(Format( ' Number = %d / String = %s ' , [MsgArray[ 0 ], MsgArray[ 1 ]]));
end ;
Fungsi konversi secara internal menggunakan JSON untuk memastikan karakter bagian lolos untuk memastikan paket/pembongkaran array tanpa perubahan konten. Jadi, Anda tidak perlu khawatir dengan isi suku cadang tipe varian.
Silakan periksa aplikasi demo dan lihat perintah Kirim Cetak untuk mengetahui cara mengirim dan menerima aliran data, dan juga menggunakan kompresi untuk meningkatkan kecepatan komunikasi.