我正在編程TCP服務器客戶端。我分別使用單獨的send
系統調用發送三個字符串。 但接收端我只獲得單個字符串,這是我發送的第一個字符串。剩下的兩條字符串錯過TCP客戶端未能發送字符串到服務器
下面我給出了我的服務器客戶端程序的一部分。
client.c
char *info = "infolog";
char *size = "filesize";
char *end = "fileend";
send(client, info, strlen(info)+1, 0);
send(client, size, strlen(size)+1, 0);
send(client, end, strlen(end)+1, 0);
server.c
while ((read_size = recv(client, msg, sizeof(msg), 0))) {
printf("Data: %s\n", msg);
memset(msg, 0, sizeof(msg));
}
實際輸出:
Data: infolog
預期輸出
Data: infolog
Data: filesize
Data: fileend
謝謝。
試着打印'read_size'。您很可能同時收到了三條消息。 – mpontillo
@Mike你說得對。我收到所有字符串的strlen。爲什麼服務器不能單獨收到? – sujin
請參閱下面的Basile的答案。 TCP是基於流的,因此根據網絡條件,緩衝等,您可能會收到比已發送更多的輸出,或更少的輸出。 – mpontillo