我遇到的问题是我的服务器发送的字符串大小为600字节。现在从服务器读取我的客户端使用语句
n=read(sockfd,rbuffer,255);
其中rbuffer是我的缓冲区。
如果我尝试增加read语句(255)中提到的大小,我会遇到分段错误。
现在我知道客户端只接收服务器发送的部分信息。如何修改或更改我读取信息的方式,以便我可以读取所有字节?
PS:字符串的大小是如此之大,因为我试图发送XML字符串。
答案 0 :(得分:3)
您还需要增加rbuffer
的大小。一种方法可以是:
unsigned char rbuffer[4096];
n = read(socksfd, rbuffer, sizeof(rbuffer));
这样,如果你决定改变大小,你只需要在一个地方做。
答案 1 :(得分:2)
那么,当您查看read()系统调用文档时,它会说最后一个参数是缓冲区的大小。
在您的情况下,您需要确保rbuffer
足够大!
我想你有一个地方:
unsigned char rbuffer[255];
n = read( sockfd, rbuffer, 255);
你会想要这样做:
unsigned char rbuffer[1024];
n = read( sockfd, rbuffer, 1024);
为确保不要将无效值设置为大小,请使用sizeof( rbuffer )
(如果已在堆栈中分配)(如上所述)。
如果动态分配,则必须使用分配缓冲区时使用的大小:
int bufsize = 1024;
char *buffer = malloc(bufsize);
n = read( sockfd, buffer, bufsize);