C中的网络编程中的读取功能

Saj*_*ani 0 c sockets connection network-programming

我用这段代码从socket读取:

int n ;
char buffer[256];
n = read(newsockfd, buffer, 255);
    if (n < 0)
    {
        error("ERROR reading from socket");
    }
Run Code Online (Sandbox Code Playgroud)

如果必须读取的数据大于255字节(例如1000)必须发生哪些更改?

我知道改变char buffer[1000],我需要不同的解决方案.

sth*_*sth 5

只需从套接字读取几次,直到获得想要接收的所有数据.

例如,要接收1000个字节,它可能看起来像这样(成功时read返回读取的字节数):

int received = 0;
while (received < 1000) {
  n = read(newsockfd, buffer, 255);
  // error checking...
  // do something with the partial data in "buffer"...
  received += n;
}
Run Code Online (Sandbox Code Playgroud)


eld*_*rge 5

使用类似的东西:

char buffer[256];
memset(buffer, 0, sizeof(buffer));
char* pBuf = buffer;
int bytesLeft = sizeof(buffer) - sizeof(char);

while(bytesLeft > 0)
{
    int n = read(newsockfd, pBuf, bytesLeft);
    if (n < 0)
    {
        error("ERROR reading from socket");
        break;
    }
    if(n == 0)
    {
        error("peer shutted down");
        break;
    }
    pBuf += n;
    bytesLeft -= n;
}
Run Code Online (Sandbox Code Playgroud)