C中tcp套接字中的可变长度数据

时间:2013-06-25 12:55:05

标签: c sockets

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

服务器

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

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

2 个答案:

答案 0 :(得分:0)

如果read断开连接,

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

你必须改变循环条件。例如,您可以发送特定的字符,如果它是recv的{​​{1}},则停止循环。

顺便说一句,如果你想打印buffer,你必须在它的末尾添加一个空字符:

buffer

答案 1 :(得分: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);

这看起来很有效