2011-12-20 86 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

相关问题