0

我想创建可以处理可变长度数据的服务器。为此,我写了以下内容。

服务器:

char buffer[256];

flush(buffer);
printf("Message: ");
while((n = read(sockfd ,buffer, 255)) > 0) {
    printf("%s", buffer);
    flush(buffer);
}

客户:

char buffer[512] = 'a' 366 times;

n = write(sockfd, buffer, strlen(buffer));

但是服务器继续循环并且不退出。我是否需要在来自客户端的消息末尾向服务器发送一些特定字符?还是需要更改服务器循环的条件?

4

2 回答 2

0

我已将服务器端循环更改为:

while((n = read(sockfd, buffer, 255)) > 0) {
    printf("%s", buffer);
    len = strlen(buffer);
    if(len < 255 && buffer[len] == '\0')
        break;
    flush(buffer);
}

客户端代码为

n = write(sockfd, buffer, strlen(buffer) + 1);

这看起来很有效

于 2013-06-25T14:24:54.667 回答
0

read如果断开连接将返回 0 sockfd,如果发生错误则返回 -1。实际上,这不是一个无限循环:read将阻塞程序,直到有新数据可用sockfd

你必须改变你的循环条件。例如,您可以发送一个特定的字符,如果它是recv's buffer,则停止循环。

顺便说一句,如果要打印buffer,则必须在其末尾放置一个空字符:

char buffer[256];

flush(buffer);
printf("Message: ");
while((n = read(sockfd ,buffer, 255)) > 0) {
    buffer[n] = '\0';
    printf("%s", buffer);
    flush(buffer);
}
于 2013-06-25T13:00:03.873 回答