Гнездо БУФЕР ДЛЯ СТРОЧКИ - PullRequest
0 голосов
/ 05 июня 2018

У меня есть проблемы с преобразованием моего BUFFER в строку, я хотел бы знать, как мне преобразовать мой BUFFER, recv из сокета.

Я хотел бы иметь мой db[0] = buffer, какой буферсодержит строку типа «helloworld», поэтому, если я захочу print db[0], я получу «helloworld».

while(1){
    recv(newSocket, buffer, BUFFER_SIZE, 0);
    if(strcmp(buffer, "q") == 0){
        printf("Deconnexion de %s:%d\n", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
        break;
    }else{
        printf("%s\n",buffer);//Client recu: 
        send(newSocket, buffer, strlen(buffer), 0);
        bzero(buffer, sizeof(buffer));

        db[i]=buffer;

        printf("%c",db[i]);

        //mysql_q(db[i]);// query function

        i++;
    }               
}

db - это массив символов, но при компиляции он выдает мне эту ошибку:

server.cpp:81:12: error: invalid conversion from ‘char*’ to ‘char’ [-fpermissive]
  db[i]=buffer;

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

если db [i] является массивом символов, для которого db должен быть массивом двойного измерения, вам нужно сделать memcpy или strcpy (если вы уверены, что в буфере будет строка с нулевым символом в конце), чтобы получить содержимое буфера в db [я].

db[i] = buffer

неверно, поэтому ошибка компиляции.

0 голосов
/ 05 июня 2018

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

Кроме того, recv не завершает нулями полученные данные, вам нужно сделать это снова самостоятельно, чтобы иметь возможность вызвать strcmp.

Самое главное, вам нужен способчтобы отделить завершенные сообщения .

Другими словами, вам нужно переписать весь кусок с извлечением сообщения, частичным чтением / записью и обработкой ошибок, чтобы это работало.

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