2011-12-20 40 views
-2

在客戶端 - 服務器編程中工作時,我在客戶端傳遞了3個字符串,它將被服務器接收,並且應該在那裏打印3次。 (即我已經使用'for'循環,它將分別在客戶端&中執行讀取&寫入操作),但是在服務器中,只有第一個字符串正在打印。爲什麼我無法讀取服務器文件中的多個字符串?

請解釋一下,

這裏是我的代碼

server.c

#include "head.h" 

void readstr(int connfd ,char [][20]); 
//void writestr(char * ,int); 

int main(int c ,char *v[]) 
{ 

     // socket declarations,etc 
     sd =socket(AF_INET ,SOCK_STREAM ,0); 


      // Binding socket 
     retbind =bind(sd ,(struct sockaddr*)&serveraddress ,sizeof(serveraddress 
)); 


     listen(sd ,4); 
     for(;;) 
     { 
     printf("i am waiting for client\n"); 
     len =sizeof(cliaddr); 
     connfd = accept(sd ,(struct sockaddr*)&cliaddr ,&len); 
     readstr(connfd ,databuf); 
     close(connfd); 
     } 
     return 0; 
} 

void readstr(int connfd ,char str[3] [20]) 
{ 
     int pointer=0 ,i=0, n,pos=0; 
     memset(str ,'\0',sizeof(str)); 
     for(i=0;i<3;i++) 
     { 
     while((n=read(connfd ,str[i] ,20)) >>0) 
     { 
       printf("Looping while\n"); 
       pos =pos +n; 

     } 
     str[i][pos] ='\0'; 
     } 
     for(i=0;i<3;i++) 
     { 
       printf("\n%s",str[i]); 
     } 
} 

client.c

#include "head.h" 
    void send1(int ,char*); 

    int main(int c,char*v[]) 
    { 

      //Socket declarations, etc.. 
      sd = socket(AF_INET ,SOCK_STREAM ,0); 
      //Connect 
      if(connect(sd,(struct sockaddr*)&serveraddress ,sizeof(serveraddress)) < 
    0) 

      { 
        printf("cannot connect to server"); 
        exit(1); 
      } 
      for(i=0;i<3;i++) 
      { 
        memset(buf ,'\0',sizeof(buf)); 
        printf("\n Enter the string : "); 
        fgets(buf[i],20,stdin); 
        len =strlen(buf[i]); 
        if(buf[i][len] =='\n') 
         buf[i][len]='\0'; 

        send1(sd ,(char *)buf); 
      } 
      shutdown(sd ,SHUT_WR); 
    } 

    void send1(int sd ,char *str) 
    { 

      int n ,byteswritten =0, wr; 
      char buf[1024]; 
      strcpy(buf ,str); 
      n =strlen(buf); 
      while(byteswritten < n) 
      { 
      printf("\nStarting to write in client side\n"); 
      wr = write(sd , buf+byteswritten ,(n-byteswritten)); 
      byteswritten+=wr; 
      } 
      printf("\n string sent %s" ,buf); 

    } 
+1

[爲什麼我無法讀取服務器文件中的多個字符串?](http://stackoverflow.com/questions/8574952/why-i-am-not-able-to-read-multiple -strings-in-the-server-file) – 2011-12-20 14:19:41

回答

0

在server.c在readstr()在下一次for迭代之前,您沒有將pos設置爲零。 此外,還有怪行:

while((n=read(connfd ,str[i] ,20)) >>0) 

注意 「>>」。

+0

謝謝arrowdodger :) – user1107731 2011-12-22 06:20:27

相關問題