1

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

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);

为了提供一点上下文,这是针对我们必须编写代理的计算机网络类。所以我正在做的是听取答案并将其转发给客户。

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

4

3 回答 3

11

缓冲区可能包含'\a'使计算机发出哔哔声的字符。从 5.2.2(字符显示语义)开始:

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

  • \a (alert) 在不改变活动位置的情况下产生声音或可见的警报。
于 2010-11-17T17:04:37.473 回答
1

没关系,找到了,实际上是 printf 语句偶尔发出哔哔声!

于 2010-11-17T17:06:19.317 回答
1

同意'\a'哔的解释。

关于您的代码的另一点:

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

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

在这种情况下,您将写入被禁止的记忆,即(该死,我多么讨厌这个短语)undefined behavior。简单地说——内存覆盖,这很糟糕。

您应该在写入之前检查套接字错误buffer

于 2010-11-17T17:21:10.453 回答