9

使用 C/C++ 套接字编程,以及“read(socket, buffer, BUFSIZE)”方法。“缓冲区”到底是什么我知道 char 和 byte 是一回事,但是字节数组中有多少元素有关系吗?缓冲区是否需要能够保存整个消息直到出现空字符?

4

3 回答 3

14

BUFSIZE 应该等于缓冲区的大小(以字节为单位)。read() 将在缓冲区已满时停止读取。这是一个例子:

#define MY_BUFFER_SIZE 1024

char mybuffer[MY_BUFFER_SIZE];
int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE);
于 2008-09-27T06:33:07.157 回答
6

与往常一样,sizeof有机会时使用。使用内置 operator sizeof,您要求编译器计算变量的大小,而不是自己指定。当实际变量的大小与您的想法不同时,这会降低引入错误的风险。

所以,而不是做

#define BUFSIZE 1500
char buffer[BUFSIZE];
int n = read(sock, buffer, BUFSIZE);

你真的应该使用

char buffer[1500];
int n = read(sock, buffer, sizeof buffer);

请注意您不需要在 sizeof 的参数周围加上括号,除非参数是类型的名称。

于 2008-10-15T11:00:52.157 回答
0

您的套接字实现不需要足够大的缓冲区来确定保存整个消息,但它可能会很方便,具体取决于您在做什么。

于 2008-09-27T07:48:57.503 回答