如何在C中的套接字上读取超过256个字节

时间:2012-03-13 09:14:58

标签: c tcp client

我遇到的问题是我的服务器发送的字符串大小为600字节。现在从服务器读取我的客户端使用语句

   n=read(sockfd,rbuffer,255);

其中rbuffer是我的缓冲区。

如果我尝试增加read语句(255)中提到的大小,我会遇到分段错误。

现在我知道客户端只接收服务器发送的部分信息。如何修改或更改我读取信息的方式,以便我可以读取所有字节?

PS:字符串的大小是如此之大,因为我试图发送XML字符串。

2 个答案:

答案 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);