在C中,我要求服務器打印它接收到的任何消息的內容。所有消息均遵循以下格式:「消息:/計數器/」。C:printf非打印 n
while (1){
length = sizeof(struct sockaddr);
/* receive from client */
lenstr = recv(newfd, buff, 20000, 0);
if (lenstr == -1){
perror("recv(): ");
exit(1);
}
buff[lenstr] = '\0';
printf("Received: %s \n", buff);
/* send back to client*/
if (send(newfd, buff, lenstr, 0) < 0){
perror("send(): ");
exit(-1);
}
當我運行服務器時,消息一個接一個地出現,而不需要換行。我在這裏錯過了什麼? (這裏的連接是TCP) 謝謝。
如果這是TCP,也許一個recv()調用讀取從客戶端發送的許多行。 TCP只是一個字節流,它不會在消息或數據包中爲您分割數據,這取決於您是否需要它。 – nos
哦,我明白了。所以這個換行符出現在我可能的完整緩衝區的末尾,對吧? –
是的,當你調用recv()時,你的緩衝區將包含很多可用的數據,這個數據可能是來自很多send()調用的數據(或者來自send()調用的部分數據) – nos