DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoSock
Boolean iUseTls
Integer iPort
Integer iMaxWaitMs
Integer iValue
Boolean iBigEndian
String sHexStr
String sTemp1
Integer iTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatSocket)) To hoSock
If (Not(IsComObjectCreated(hoSock))) Begin
Send CreateComObject of hoSock
End
// --------------------------------------------------------------------
// This example uses the public TCP echo service at https://tcpbin.com/
// --------------------------------------------------------------------
Move False To iUseTls
Move 4242 To iPort
Move 5000 To iMaxWaitMs
Get ComConnect Of hoSock "tcpbin.com" iPort iUseTls iMaxWaitMs To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoSock To sTemp1
Showln sTemp1
Procedure_Return
End
// Wait a max of 2 seconds for a response..
Set ComMaxReadIdleMs Of hoSock To 2000
// Send a 16-bit integer using big-endian byte ordering (also called network byte order)
// 12022 decimal = 2EF6 hex
Move 12022 To iValue
Move True To iBigEndian
Get ComSendInt16 Of hoSock iValue iBigEndian To iSuccess
// Send it again, because we'll read it two different ways..
Get ComSendInt16 Of hoSock iValue iBigEndian To iSuccess
// The tcpbin.com echo server only echoes after receiving an LF (linefeed char)
Get ComSendByte Of hoSock 10 To iSuccess
// 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.)
Get ComReceiveNBytesENC Of hoSock 2 "hex" To sHexStr
// 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.
Showln "Expecting big-endian 2EF6"
Showln sHexStr
// Let's read directly to an integer..
Get ComReceiveInt16 Of hoSock iBigEndian True To iSuccess
Showln "Expecting 12022"
Get ComReceivedInt Of hoSock To iTemp1
Showln "Received: " iTemp1
// Consume the LF that gets echoed back..
Get ComReceiveByte Of hoSock True To iSuccess
// --------------------------------------------------------------------
// Let's do the same thing, but with little-endian byte ordering.
Showln "----"
// 12022 decimal = 2EF6 hex, but little-endian byte ordering will send the bytes in the order 0xF6 0x2E
Move 12022 To iValue
Move False To iBigEndian
Get ComSendInt16 Of hoSock iValue iBigEndian To iSuccess
Get ComSendInt16 Of hoSock iValue iBigEndian To iSuccess
Get ComSendByte Of hoSock 10 To iSuccess
Get ComReceiveNBytesENC Of hoSock 2 "hex" To sHexStr
Showln "Expecting little-endian F62E"
Showln sHexStr
Get ComReceiveInt16 Of hoSock iBigEndian True To iSuccess
Showln "Expecting 12022"
Get ComReceivedInt Of hoSock To iTemp1
Showln "Received: " iTemp1
// Consume the LF that gets echoed back..
Get ComReceiveByte Of hoSock True To iSuccess
Get ComClose Of hoSock 1000 To iSuccess
// Output:
// Expecting big-endian 2EF6
// 2EF6
// Expecting 12022
// Received: 12022
// ----
// Expecting little-endian F62E
// F62E
// Expecting 12022
// Received: 12022
End_Procedure