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