Sample code for 30+ languages & platforms
PureBasic

Socket Receive String Until Specific Byte Value is Received

Demonstrates the Chilkat Socket ReceiveStringUntilByte method.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkSocket.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    sock.i = CkSocket::ckCreate()
    If sock.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ; --------------------------------------------------------------------
    ; This example uses the public TCP echo service at https://tcpbin.com/
    ; --------------------------------------------------------------------

    useTls.i = 0
    port.i = 4242
    maxWaitMs.i = 5000
    success = CkSocket::ckConnect(sock,"tcpbin.com",port,useTls,maxWaitMs)
    If success = 0
        Debug CkSocket::ckLastErrorText(sock)
        CkSocket::ckDispose(sock)
        ProcedureReturn
    EndIf

    ; Wait a max of 2 seconds for a response..
    CkSocket::setCkMaxReadIdleMs(sock, 2000)

    ; Send some strings, each terminated by a 0 byte.
    CkSocket::ckSendString(sock,"This is the 1st string")
    CkSocket::ckSendByte(sock,0)
    CkSocket::ckSendString(sock,"This is string number 2")
    CkSocket::ckSendByte(sock,0)

    ; The tcpbin.com echo server only echoes after receiving an LF (linefeed char)
    CkSocket::ckSendByte(sock,10)

    ; Now let's receive what is echoed back....
    ; Receive each string and the NULL byte.
    ; The call to ReceiveStringUntilByte will receive incoming data until the lookForByte is encountered.
    ; The lookForByte is receive and discarded (it is not returned in the string)
    lookForByte.i = 0
    s1.s = CkSocket::ckReceiveStringUntilByte(sock,lookForByte)
    If CkSocket::ckLastMethodSuccess(sock) = 0
        Debug CkSocket::ckLastErrorText(sock)
        CkSocket::ckDispose(sock)
        ProcedureReturn
    EndIf

    Debug s1

    s2.s = CkSocket::ckReceiveStringUntilByte(sock,lookForByte)
    If CkSocket::ckLastMethodSuccess(sock) = 0
        Debug CkSocket::ckLastErrorText(sock)
        CkSocket::ckDispose(sock)
        ProcedureReturn
    EndIf

    Debug s2

    ; The echo server will also echo back the final LF
    CkSocket::ckReceiveByte(sock,1)
    maxWaitMs = 100
    CkSocket::ckClose(sock,100)

    ; Output:
    ; This is the 1st string
    ; This is string number 2


    CkSocket::ckDispose(sock)


    ProcedureReturn
EndProcedure