-1
大家好我試圖做一個服務器,將收到一個消息,如:「str1 \ 0str2 \ 0str3 \ 0」,然後在子字符串中分離。在客戶端,一切似乎都很好,但是當我在服務器端收到消息時,我只收到「str1」。任何幫助將不勝感激謝謝!C:TCP服務器不接收整個郵件
服務器:
bzero(buffer,256);
n = read(newsockfd,buffer, 255);
if (n < 0) {
perror("ERROR reading from socket");
exit(1);
}
printf("Here is the message: %s\n",buffer);
for(int i = 0; i < strlen(buffer); i++){
printf("%c", buffer[i],i);
if (buffer[i] == 0){
printf("0");
}
}`
客戶:
char buffer[256];
int length =0;
char *uptr = buffer;
int i;
strcpy(uptr,argv[3]);
length = length + strlen(argv[3])-3;
for (i = 4 ; i < argc ; i++){
memcpy(uptr+length+i, argv[i] ,strlen(argv[i]) +1);
length = length + strlen(argv[i]);
}
buffer[length + (argc - 1)]= 0;
for(i = 0; i < length + argc; i++){
printf("%c", buffer[i],i);
}
你怎麼知道你只收到「str1」?如果你打印出'n',你會得到什麼? – ThingyWotsit
'\ 0'標記C中字符串的結尾,可能是您收到了所有數據,但打印函數假定字符串已結束。 –
..此外,這是很有可能的,(雖然不太可能)。由於TCP的八位字節流性質,你只能第一次得到's'。 – ThingyWotsit