【问题标题】:socket BUFFER TO STRING套接字缓冲区到字符串
【发布时间】:2018-06-05 10:16:42
【问题描述】:

我在将我的 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 类型是一个 char 数组,但是当我编译时它给了我这个错误:

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

【问题讨论】:

  • dbbuffer的类型是什么,请给出定义?错误很明显db[i]charbufferchar *。你应该改变db类型
  • 什么样的数据库?字符[]?您不应该将 char* 分配给 char,db[i] 是一个 char。 char* db[i] 更好。
  • c++ 不是 c。选择一种语言。
  • 这是我的数据库和缓冲区类型:char buffer[BUFFER_SIZE];字符数据库[BUFFER_SIZE]; @Ôrel
  • @azures 编辑您的问题并在其中插入补充。 db[i] 是一个 char,不能接收 char[] 类型的值。

标签: c++ c sockets


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    db[i] = buffer
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多