Почему я не могу прочитать несколько строк в файле сервера? - PullRequest
0 голосов
/ 20 декабря 2011

Работая в клиент-серверном программировании, я передал 3 строки в клиенте, которые будут получены сервером и должны быть напечатаны там 3 раза. (т.е. я использовал цикл 'for', который будет выполнять операции чтения и записи на стороне клиента и сервера соответственно.), но на сервере печатается только 1-я строка.

Пожалуйста, объясните,

Вот мой код

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 голосов
/ 20 декабря 2011

В server.c в readstr() вы не устанавливаете pos в ноль перед следующей for итерацией.Также есть странная строка:

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

Примечание ">>".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...