如何创建一个缓冲区以读取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的参数周围加上括号。