PowerShell
PowerShell
Transfer a File using Sockets (TLS or non-TLS)
See more Socket/SSL/TLS Examples
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.Chilkat PowerShell Downloads
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"
$success = $false
# 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.
$bdToSend = New-Object Chilkat.BinData
$success = $bdToSend.LoadFile("somePath/someFile.dat")
# Assume success for the example...
$sndSock = New-Object Chilkat.Socket
$bUseTls = $true
$port = 5555
$maxWaitMs = 5000
$success = $sndSock.Connect("some_domain_or_ip.com",$port,$bUseTls,$maxWaitMs)
# Assume success for the example...
# Tell the receiver how many bytes are coming.
$numBytes = $bdToSend.NumBytes
$bBigEndian = $true
$success = $sndSock.SendInt32($numBytes,$bBigEndian)
# Send the file data (sends the entire contents of bdToSend).
$success = $sndSock.SendBd($bdToSend,0,0)
# Get an acknowledgement.
$success = $sndSock.ReceiveInt32($bBigEndian)
if ($success -eq $false) {
$($sndSock.LastErrorText)
exit
}
# Did the receiver get the correct number of bytes?
if ($sndSock.ReceivedInt -ne $numBytes) {
$("The receiver did not acknowledge with the correct number of bytes.")
exit
}
$("File sent!")
# ------------------------------------------------------------------------------------
# The code below is for the receiving side (running on some other computer..)
$listenSock = New-Object Chilkat.Socket
$success = $listenSock.BindAndListen(5555,25)
if ($success -eq $false) {
$($listenSock.LastErrorText)
exit
}
# Get the next incoming connection
# Wait a maximum of 20 seconds (20000 millisec)
$rcvSock = New-Object Chilkat.Socket
$success = $listenSock.AcceptNext(20000,$rcvSock)
if ($success -eq $false) {
$($listenSock.LastErrorText)
exit
}
# The sender will first send the big-endian integer for the number of bytes
# that are forthcoming..
$success = $rcvSock.ReceiveInt32($bBigEndian)
if ($success -ne $true) {
$($rcvSock.LastErrorText)
exit
}
$numBytesComing = $rcvSock.ReceivedInt
# Receive that many bytes..
$bdReceived = New-Object Chilkat.BinData
$success = $rcvSock.ReceiveBdN($numBytesComing,$bdReceived)
if ($success -ne $true) {
$($rcvSock.LastErrorText)
exit
}
# Acknowledge the sender by sending back the number of bytes we received.
$success = $rcvSock.SendInt32($bdReceived.NumBytes,$bBigEndian)
# Close the connection.
$maxWaitMs = 20
$rcvSock.Close($maxWaitMs)
# Save the received data to a file.
$success = $bdReceived.WriteFile("somePath/someFile.dat")
# Assume success for the example...
$("File received!")