插座BUFFER到STRING

时间:2018-06-05 10:16:42

标签: c++ c sockets

我有问题将我的BUFFER转换为字符串,我想知道如何从套接字转换我的BUFFER,recv。

我想要我的db[0] = buffer,哪个缓冲区包含像“helloworld”这样的字符串,所以如果我想要打印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 type是一个char数组,但是当我编译它时会给我这个错误:

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

2 个答案:

答案 0 :(得分:3)

您需要处理recvsend的返回值,因为它们执行必须处理的不完整读取和写入。

此外,recv并非零终止接收的数据,您需要再次自己执行此操作才能调用strcmp

最重要的是,您需要a way to delimit complete messages

换句话说,您需要使用消息提取,部分读/写和错误处理来重写整个部分以使其工作。

答案 1 :(得分:0)

如果db [i]是一个char数组,db应该是double维数组,你需要做一个memcpy或strcpy(如果你确定缓冲区将有空终止字符串)来获取db的内容[一世]。

db[i] = buffer

是错误的,这就是编译错误的原因。