2010-11-17 63 views
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); 

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

我不能告诉你我有多高跳出我的椅子当我第一次听到蜂鸣声...

回答

11

缓冲区可能包含'\a'焦炭这使得计算机的蜂鸣声。从5.2.2(字符显示语义):

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

  • \一个(警报)产生在不改变活动位置的情况下发出声音或视觉警报。
+0

是啊,我刚刚发现这一点。对此毫无头绪! – 2010-11-17 17:06:43

1

没关系,发现它,它实际上是printf语句,它正在做一个偶然的哔声!

+0

即时兴趣,如何?我不能让我的电脑扬声器与'printf(“\ a”)哔哔'我做错了什么? – Newbie 2010-11-17 17:10:26

+0

我不知道,从我读过的printf(“\ a”)应该会让你的电脑发出哔哔声... – 2010-11-17 17:14:57

+0

@Newbie:并非所有的操作系​​统都支持蜂鸣声。 – fredoverflow 2010-11-17 17:18:53

1

同意'\a'蜂鸣解释。

有关您的代码还有一点:

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

注意recvResult将为-1,如果有一个I/O错误(或者,如果你在非阻塞模式下工作,没有数据读取至今)。

在这种情况下,你会写入禁止的内存,这是(该死的,我怎么恨这句话)未定义的行为。简单地说 - 内存覆盖,这是不好的。

你应该前检查插座错误写入buffer

+0

确实你是对的! – 2010-11-17 18:03:39

相关问题