Příjem proudu s msgpack v C

hlasů
1

Já jsem se provádí server, který přijímá proud bajtů od klienta.
Proud serializovat pomocí msgpack, (a první věc, která je serializovat je délka zbývajícího proudu).

Moje otázka je, co je správný způsob, jak přijímat tento proud v C?
V pythonu můžu to udělat takto:

# Feed each byte into the Unpacker
unpacker.feed(client.recv(1))
# Unpack whatever we can from the bytes we have received
for value in unpacker:
    print(value)

Existuje způsob, jak to mohu udělat v C?

Položena 01/03/2017 v 13:42
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

to jsem vyřešil, vše, co jsem udělat, je následující:

msgpack_unpacker tUnpacker = { 0 };
BOOL bUnpacked = FALSE;
unsigned char abReceivedBytes[1] = { 0 };
msgpack_unpacked tUnpacked = { 0 };
msgpack_unpack_return eUnpackRet = MSGPACK_UNPACK_PARSE_ERROR;

while (FALSE == bUnpacked)
{
    // Read here from socket
    ...

    /* Check buffer capacity and reserve more buffer if needed */
    if (msgpack_unpacker_buffer_capacity(&tUnpacker) < nNumOfBytes)
    {
        bResult = msgpack_unpacker_reserve_buffer(&tUnpacker, nNumOfBytes);
        if (FALSE == bResult)
        {
            // Handle error
        }
    }

    /* feeds the buffer. */
    memcpy(msgpack_unpacker_buffer(&tUnpacker), &abReceivedBytes[0], nNumOfBytes);
    msgpack_unpacker_buffer_consumed(&tUnpacker, nNumOfBytes);

    /* initialize the unpacked message structure */
    msgpack_unpacked_init(&tUnpacked);
    eUnpackRet = msgpack_unpacker_next(&tUnpacker, &tUnpacked);
    switch (eUnpackRet) {
    case MSGPACK_UNPACK_SUCCESS:
        /* Extract msgpack_object and use it. */
        bUnpacked = TRUE;
        break;
    case MSGPACK_UNPACK_CONTINUE:
        break;
    default:
        // Handle failure
        ...
    }

To je, jak si můžete přečíst proud pomocí msgpack (to je téměř ekvivalentní k python skript v můj dotaz)

Odpovězeno 01/03/2017 v 14:57
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more