2017-04-06 58 views
-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); 

     } 
+0

你怎麼知道你只收到「str1」?如果你打印出'n',你會得到什麼? – ThingyWotsit

+0

'\ 0'標記C中字符串的結尾,可能是您收到了所有數據,但打印函數假定字符串已結束。 –

+0

..此外,這是很有可能的,(雖然不太可能)。由於TCP的八位字節流性質,你只能第一次得到's'。 – ThingyWotsit

回答

0

你從來沒有寫過任何代碼接收消息。所以你的代碼沒有收到消息並不奇怪。

bzero(buffer,256); 
    n = read(newsockfd,buffer, 255); 

這會讀取一些可能或可能不是消息的數據。畢竟,read函數不知道你的消息是什麼樣的。

printf("Here is the message: %s\n",buffer); 

等等,什麼?什麼使這個消息?這只是您從連接中讀取的一些字節。這不是一個消息。

您需要編寫一些代碼才能接收消息,否則您將不會收到消息,而只會從連接接收一堆字節。

相關問題