如何创建一个缓冲区以读取C中的套接字数据

时间:2020-03-06 14:49:12  来源:igfitidea点击:

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

解决方案

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

#define MY_BUFFER_SIZE 1024

char mybuffer[MY_BUFFER_SIZE];
int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE);

套接字实现不需要缓冲区足够大就可以肯定地容纳整个消息,但是根据我们在做什么,这可能会很方便。

与往常一样,有机会时使用sizeof。使用内置的运算符" sizeof",我们要求编译器计算变量的大小,而不是自己指定。当实际变量的大小与我们认为的不同时,这可以降低引入错误的风险。

所以,而不是做

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

你真的应该用

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

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