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
(Visual FoxPro) 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.
LOCAL loBdToSend LOCAL lnSuccess LOCAL loSndSock LOCAL lnBUseTls LOCAL lnPort LOCAL lnMaxWaitMs LOCAL lnNumBytes LOCAL lnBBigEndian LOCAL loListenSock LOCAL loRcvSock LOCAL lnNumBytesComing LOCAL loBdReceived LOCAL lnMaxWaitMs * 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. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.BinData') loBdToSend = CreateObject('Chilkat.BinData') lnSuccess = loBdToSend.LoadFile("somePath/someFile.dat") * Assume success for the example... * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Socket') loSndSock = CreateObject('Chilkat.Socket') lnBUseTls = 1 lnPort = 5555 lnMaxWaitMs = 5000 lnSuccess = loSndSock.Connect("some_domain_or_ip.com",lnPort,lnBUseTls,lnMaxWaitMs) * Assume success for the example... * Tell the receiver how many bytes are coming. lnNumBytes = loBdToSend.NumBytes lnBBigEndian = 1 lnSuccess = loSndSock.SendInt32(lnNumBytes,lnBBigEndian) * Send the file data (sends the entire contents of bdToSend). lnSuccess = loSndSock.SendBd(loBdToSend,0,0) * Get an acknowledgement. lnSuccess = loSndSock.ReceiveInt32(lnBBigEndian) IF (lnSuccess <> 1) THEN ? loSndSock.LastErrorText RELEASE loBdToSend RELEASE loSndSock CANCEL ENDIF * Did the receiver get the correct number of bytes? IF (loSndSock.ReceivedInt <> lnNumBytes) THEN ? "The receiver did not acknowledge with the correct number of bytes." RELEASE loBdToSend RELEASE loSndSock CANCEL ENDIF ? "File sent!" * ------------------------------------------------------------------------------------ * The code below is for the receiving side (running on some other computer..) * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Socket') loListenSock = CreateObject('Chilkat.Socket') lnSuccess = loListenSock.BindAndListen(5555,25) IF (lnSuccess <> 1) THEN ? loListenSock.LastErrorText RELEASE loBdToSend RELEASE loSndSock RELEASE loListenSock CANCEL ENDIF * Get the next incoming connection * Wait a maximum of 20 seconds (20000 millisec) loRcvSock = loListenSock.AcceptNextConnection(20000) IF (loListenSock.LastMethodSuccess = 0) THEN ? loListenSock.LastErrorText RELEASE loBdToSend RELEASE loSndSock RELEASE loListenSock CANCEL ENDIF * The sender will first send the big-endian integer for the number of bytes * that are forthcoming.. lnSuccess = loRcvSock.ReceiveInt32(lnBBigEndian) IF (lnSuccess <> 1) THEN ? loRcvSock.LastErrorText RELEASE loRcvSock RELEASE loBdToSend RELEASE loSndSock RELEASE loListenSock CANCEL ENDIF lnNumBytesComing = loRcvSock.ReceivedInt * Receive that many bytes.. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.BinData') loBdReceived = CreateObject('Chilkat.BinData') lnSuccess = loRcvSock.ReceiveBdN(lnNumBytesComing,loBdReceived) IF (lnSuccess <> 1) THEN ? loRcvSock.LastErrorText RELEASE loRcvSock RELEASE loBdToSend RELEASE loSndSock RELEASE loListenSock RELEASE loBdReceived CANCEL ENDIF * Acknowledge the sender by sending back the number of bytes we received. lnSuccess = loRcvSock.SendInt32(loBdReceived.NumBytes,lnBBigEndian) * Close the connection. lnMaxWaitMs = 20 loRcvSock.Close(lnMaxWaitMs) RELEASE loRcvSock * Save the received data to a file. lnSuccess = loBdReceived.WriteFile("somePath/someFile.dat") * Assume success for the example... ? "File received!" RELEASE loBdToSend RELEASE loSndSock RELEASE loListenSock RELEASE loBdReceived |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.