Tcl
Tcl
Socket Send/Receive 16-bit Integers
Demonstrates sending and receiving 16-bit integers over a socket connection using either big-endian or little-endian byte ordering.Chilkat Tcl Downloads
load ./chilkat.dll
set success 0
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
set sock [new_CkSocket]
# --------------------------------------------------------------------
# This example uses the public TCP echo service at https://tcpbin.com/
# --------------------------------------------------------------------
set useTls 0
set port 4242
set maxWaitMs 5000
set success [CkSocket_Connect $sock "tcpbin.com" $port $useTls $maxWaitMs]
if {$success == 0} then {
puts [CkSocket_lastErrorText $sock]
delete_CkSocket $sock
exit
}
# Wait a max of 2 seconds for a response..
CkSocket_put_MaxReadIdleMs $sock 2000
# Send a 16-bit integer using big-endian byte ordering (also called network byte order)
# 12022 decimal = 2EF6 hex
set value 12022
set bigEndian 1
CkSocket_SendInt16 $sock $value $bigEndian
# Send it again, because we'll read it two different ways..
CkSocket_SendInt16 $sock $value $bigEndian
# The tcpbin.com echo server only echoes after receiving an LF (linefeed char)
CkSocket_SendByte $sock 10
# Let's see hex values of the 2 bytes sent in network byte order (big-endian)
# (The echo server sends back exactly the bytes received.)
set hexStr [CkSocket_receiveNBytesENC $sock 2 "hex"]
# In the big-ending byte order, the byte order is most significant byte to least significant,
# therefore we should see the bytes in the order 0x2E 0xF6.
puts "Expecting big-endian 2EF6"
puts "$hexStr"
# Let's read directly to an integer..
set success [CkSocket_ReceiveInt16 $sock $bigEndian 1]
puts "Expecting 12022"
puts "Received: [CkSocket_get_ReceivedInt $sock]"
# Consume the LF that gets echoed back..
CkSocket_ReceiveByte $sock 1
# --------------------------------------------------------------------
# Let's do the same thing, but with little-endian byte ordering.
puts "----"
# 12022 decimal = 2EF6 hex, but little-endian byte ordering will send the bytes in the order 0xF6 0x2E
set value 12022
set bigEndian 0
CkSocket_SendInt16 $sock $value $bigEndian
CkSocket_SendInt16 $sock $value $bigEndian
CkSocket_SendByte $sock 10
set hexStr [CkSocket_receiveNBytesENC $sock 2 "hex"]
puts "Expecting little-endian F62E"
puts "$hexStr"
set success [CkSocket_ReceiveInt16 $sock $bigEndian 1]
puts "Expecting 12022"
puts "Received: [CkSocket_get_ReceivedInt $sock]"
# Consume the LF that gets echoed back..
CkSocket_ReceiveByte $sock 1
CkSocket_Close $sock 1000
# Output:
# Expecting big-endian 2EF6
# 2EF6
# Expecting 12022
# Received: 12022
# ----
# Expecting little-endian F62E
# F62E
# Expecting 12022
# Received: 12022
delete_CkSocket $sock