为什么下面的代码让我的电脑发出哔哔声?

时间:2010-11-17 17:01:54

标签: c++ windows winsock2

我很难理解为什么这段代码会让我的电脑发出哔哔声。我已经将这部分代码隔离开来,偶尔发出哔哔声,但是我看不出它有什么问题。

const int BUFFER_LENGTH = 8192;
char buffer [BUFFER_LENGTH + 1];
int recvResult;

do
{
    recvResult = recv(webSocket, buffer, BUFFER_LENGTH, 0);
    buffer[recvResult] = '\0';
    printf("%s", buffer);
    if (recvResult > 0)
    {
        sendResult = send(clientSocket, buffer, recvResult, 0);
    }
}while (recvResult > 0);

shutdown(webSocket, SD_SEND);

为了给出一点上下文,这是一个计算机网络类,我们必须在其中编写代理。所以我正在做的就是听取答案,然后将其转发给客户。

当我第一次听到哔哔声时,我无法告诉你我从椅子上跳了多高......

3 个答案:

答案 0 :(得分:11)

缓冲区可能包含一个'\a'字符,使计算机发出蜂鸣声。从5.2.2(字符显示语义):

  

表示执行字符集中非图形字符的字母转义序列旨在按如下方式在显示设备上产生操作:

     
      
  • \ a(警报)在不更改活动位置的情况下生成声音或可见警报。
  •   

答案 1 :(得分:1)

没关系,发现它,实际上是偶尔发出哔哔声的printf声明!

答案 2 :(得分:1)

同意'\a'哔声解释。

关于您的代码还有一点:

recvResult = recv(webSocket, buffer, BUFFER_LENGTH, 0);
buffer[recvResult] = '\0';

请注意,如果出现I / O错误,recvResult将为-1(或者如果您在非阻塞模式下工作且到目前为止还没有数据要读取)。

在这种情况下你会写入禁止记忆,这是(该死的,我多么讨厌这句话)未定义的行为。简单来说 - 内存覆盖,这很糟糕。

您应该在写入buffer

之前检查套接字错误