我想创建可以处理可变长度数据的服务器。为此,我写了以下内容。
服务器
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));
但服务器继续循环并且不退出。我是否需要在来自客户端的消息末尾向服务器发送一些特定字符?还是需要更改服务器循环的条件?
答案 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);
这看起来很有效