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