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

如何在C中通过套接字读取超过256个字节,c,tcp,client,C,Tcp,Client,我面临的问题是,我的服务器正在发送一个大小为600字节的字符串。现在,为了从服务器读取数据,我的客户机使用以下语句 n=read(sockfd,rbuffer,255); rbuffer是我的缓冲区 如果我试图增加read语句(255)中提到的大小,我会遇到分段错误 现在我知道客户端只接收服务器发送的部分信息。我如何修改或更改读取信息的方式,以便读取所有字节 PS:字符串的大小太大了,因为我正在尝试发送一个XML字符串 您还需要增加rbuffer的大小。一种方法是: unsigned c

我面临的问题是,我的服务器正在发送一个大小为600字节的字符串。现在,为了从服务器读取数据,我的客户机使用以下语句

   n=read(sockfd,rbuffer,255);
rbuffer是我的缓冲区

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

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


PS:字符串的大小太大了,因为我正在尝试发送一个XML字符串

您还需要增加
rbuffer
的大小。一种方法是:

unsigned char rbuffer[4096];
n = read(socksfd, rbuffer, sizeof(rbuffer));

这样,如果您决定更改大小,您只需在一个位置进行更改。

当您查看系统调用文档时,它会说最后一个参数是缓冲区的大小

在您的情况下,您需要确保
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);

嗯<代码>malloc(sizeof(char),bufsize)?malloc只接受一个参数,
char
的大小定义为1。你完全正确。自从我上次接近马洛克已经太久了…:-)最好使用sizeof运算符而不是harcoded整数常量。并且需要将unsigned char buffer重命名为unsigned char rbuffer;)老实说,您从未想过要阅读read()的手册页?