Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Transfer a File using Sockets (TLS or non-TLS)Demonstrates how to two programs, one a socket writer and the other a socket reader, can transfer a file. The connection can be TLS or a regular non-encrypted TCP connection.
Use ChilkatAx-win32.pkg Procedure Test Variant vBdToSend Handle hoBdToSend Boolean iSuccess Handle hoSndSock Boolean iBUseTls Integer iPort Integer iMaxWaitMs Integer iNumBytes Boolean iBBigEndian Handle hoListenSock Variant vRcvSock Handle hoRcvSock Integer iNumBytesComing Variant vBdReceived Handle hoBdReceived Integer iMaxWaitMs String sTemp1 Integer iTemp1 Boolean bTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // On the sending side, we'll load the file into a BinData object and send. // On the receiving side, we'll read from the socket connection into a BinData, and save to a file. // This example assumes the file is not crazy-large, and that the entire contents // can fit into memory. // (If the file is too large for memory, there are other ways to send. It just involves streaming or // sending the file chunk-by-chunk..) // This section of code is for the sender. Get Create (RefClass(cComChilkatBinData)) To hoBdToSend If (Not(IsComObjectCreated(hoBdToSend))) Begin Send CreateComObject of hoBdToSend End Get ComLoadFile Of hoBdToSend "somePath/someFile.dat" To iSuccess // Assume success for the example... Get Create (RefClass(cComChilkatSocket)) To hoSndSock If (Not(IsComObjectCreated(hoSndSock))) Begin Send CreateComObject of hoSndSock End Move True To iBUseTls Move 5555 To iPort Move 5000 To iMaxWaitMs Get ComConnect Of hoSndSock "some_domain_or_ip.com" iPort iBUseTls iMaxWaitMs To iSuccess // Assume success for the example... // Tell the receiver how many bytes are coming. Get ComNumBytes Of hoBdToSend To iNumBytes Move True To iBBigEndian Get ComSendInt32 Of hoSndSock iNumBytes iBBigEndian To iSuccess // Send the file data (sends the entire contents of bdToSend). Get pvComObject of hoBdToSend to vBdToSend Get ComSendBd Of hoSndSock vBdToSend 0 0 To iSuccess // Get an acknowledgement. Get ComReceiveInt32 Of hoSndSock iBBigEndian To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoSndSock To sTemp1 Showln sTemp1 Procedure_Return End // Did the receiver get the correct number of bytes? Get ComReceivedInt Of hoSndSock To iTemp1 If (iTemp1 <> iNumBytes) Begin Showln "The receiver did not acknowledge with the correct number of bytes." Procedure_Return End Showln "File sent!" // ------------------------------------------------------------------------------------ // The code below is for the receiving side (running on some other computer..) Get Create (RefClass(cComChilkatSocket)) To hoListenSock If (Not(IsComObjectCreated(hoListenSock))) Begin Send CreateComObject of hoListenSock End Get ComBindAndListen Of hoListenSock 5555 25 To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoListenSock To sTemp1 Showln sTemp1 Procedure_Return End // Get the next incoming connection // Wait a maximum of 20 seconds (20000 millisec) Get ComAcceptNextConnection Of hoListenSock 20000 To vRcvSock If (IsComObject(vRcvSock)) Begin Get Create (RefClass(cComChilkatSocket)) To hoRcvSock Set pvComObject Of hoRcvSock To vRcvSock End Get ComLastMethodSuccess Of hoListenSock To bTemp1 If (bTemp1 = False) Begin Get ComLastErrorText Of hoListenSock To sTemp1 Showln sTemp1 Procedure_Return End // The sender will first send the big-endian integer for the number of bytes // that are forthcoming.. Get ComReceiveInt32 Of hoRcvSock iBBigEndian To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoRcvSock To sTemp1 Showln sTemp1 Send Destroy of hoRcvSock Procedure_Return End Get ComReceivedInt Of hoRcvSock To iNumBytesComing // Receive that many bytes.. Get Create (RefClass(cComChilkatBinData)) To hoBdReceived If (Not(IsComObjectCreated(hoBdReceived))) Begin Send CreateComObject of hoBdReceived End Get pvComObject of hoBdReceived to vBdReceived Get ComReceiveBdN Of hoRcvSock iNumBytesComing vBdReceived To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoRcvSock To sTemp1 Showln sTemp1 Send Destroy of hoRcvSock Procedure_Return End // Acknowledge the sender by sending back the number of bytes we received. Get ComNumBytes Of hoBdReceived To iTemp1 Get ComSendInt32 Of hoRcvSock iTemp1 iBBigEndian To iSuccess // Close the connection. Move 20 To iMaxWaitMs Get ComClose Of hoRcvSock iMaxWaitMs To iSuccess Send Destroy of hoRcvSock // Save the received data to a file. Get ComWriteFile Of hoBdReceived "somePath/someFile.dat" To iSuccess // Assume success for the example... Showln "File received!" End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.