为什么我无法读取服务器文件中的多个字符串?

时间:2011-12-20 12:47:32

标签: client c

在客户端 - 服务器编程中工作时,我在客户端传递了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 个答案:

答案 0 :(得分:0)

readstr()中的server.c中,您未在下一次pos次迭代之前将for设置为零。 还有一条奇怪的路线:

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

注意“&gt;&gt;”。