Читайте порции данных, отправленных в сокет, не зная, какова длина данных - PullRequest
0 голосов
/ 25 апреля 2019

Я создаю код WebSocket на C и пытаюсь прочитать части сокета и сохранить каждый из них по адресу буфера.Например, у меня есть строка, отправленная в сокет:

ABCD ......

Как мне прочитать ее из сокета и поместить каждый символ в адрес буфера

BUF [0], BUF [1], .....

Я хочу использовать read(socket,...,...);

Я пытался сделать это так:

read(socket, buf[0],1); // for reading first byte of the socket 
read(socket, buf+1,1); // for reading 2nd byte of the socket
....

но я не уверен, что это правильный путь.

Ответы [ 2 ]

1 голос
/ 25 апреля 2019

Вы можете использовать следующий подход для чтения байтов из сокета.

// It's a good idea to read some bytes at a time
char buffer[1024]; 

// Buffer index
int index = 0;

// Bytes read by the socket in one go
ssize_t bytesRead;


while (1) // break condition specified on the basis of bytes read
{
    bytesRead = read(socket, buffer + index, sizeof(buffer) - index);   

    if ( bytesRead <= 0 )
    {
         // No more bytes to read from the socket, terminate the loop
         break;
    }

    // bytesRead has the number of bytes that have been already read,
    // Use it to increment the buffer index.
    index += bytesRead;
}
0 голосов
/ 25 апреля 2019

Уже нашли ответ, как только вы захотите снова прочитать из сокета, смещение на сокете изменится на последние данные, которые вы прочитали при последнем использовании «read ()», поэтому приведенный мною пример верен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...