Delphi DLL
Delphi DLL
Socket Send and Receive BinData
Demonstrates the Chilkat Socket ReceiveBdN and SendBd methods.Chilkat Delphi DLL Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, BinData, Socket;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
sock: HCkSocket;
useTls: Boolean;
port: Integer;
maxWaitMs: Integer;
bdToSend: HCkBinData;
i: Integer;
byteVal: Integer;
bdRecv: HCkBinData;
begin
success := False;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
sock := CkSocket_Create();
// --------------------------------------------------------------------
// This example uses the public TCP echo service at https://tcpbin.com/
// --------------------------------------------------------------------
useTls := False;
port := 4242;
maxWaitMs := 5000;
success := CkSocket_Connect(sock,'tcpbin.com',port,useTls,maxWaitMs);
if (success = False) then
begin
Memo1.Lines.Add(CkSocket__lastErrorText(sock));
Exit;
end;
// Wait a max of 2 seconds for a response..
CkSocket_putMaxReadIdleMs(sock,2000);
// Send 26 bytes contained in a Chilkat BinData
bdToSend := CkBinData_Create();
i := 0;
byteVal := 65;
while i < 26 do
begin
CkBinData_AppendByte(bdToSend,byteVal);
byteVal := byteVal + 1;
i := i + 1;
end;
// Send the contents of the BinData
// Pass zero's in the 2nd and 3rd arguments to send the entire contents of the BinData.
CkSocket_SendBd(sock,bdToSend,0,0);
// The tcpbin.com echo server only echoes after receiving an LF (linefeed char)
CkSocket_SendByte(sock,10);
// The echo server will echo back whatever is sent to it.
// We should be able to read the same bytes back..
bdRecv := CkBinData_Create();
// Receive the 26 bytes previously sent, plus the LF char.
success := CkSocket_ReceiveBdN(sock,27,bdRecv);
if (success = False) then
begin
Memo1.Lines.Add(CkSocket__lastErrorText(sock));
Exit;
end;
// Show the contents of bdRecv in hex format
Memo1.Lines.Add(CkBinData__getEncoded(bdRecv,'hex'));
// Output: 4142434445464748494A4B4C4D4E4F505152535455565758595A0A
CkSocket_Dispose(sock);
CkBinData_Dispose(bdToSend);
CkBinData_Dispose(bdRecv);
end;