Клиентская и серверная программа Unix - очень странная ошибка сокета клиента и сервера - PullRequest
0 голосов
/ 10 сентября 2011

В настоящее время я делаю клиентскую и серверную программу в среде Unix. Я сделал это, чтобы клиент мог загружать содержимое файла на клиент. Сейчас я нахожусь в процессе добавления опций и обработчиков ошибок к примеру сервера, клиент должен ввести имя файла. Чтобы сделать это, я хотел послать сообщение «ОК», если все опции были проверены, однако, если я сделаю это, это может привести к тому, что чтение и отправка моего файла сойдут с ума, и я понятия не имею, почему.

Я загрузил функции для этого

Код клиента

int putFile (char path[256], int fd)
{
    char mystring[1000];
    char buffer[100];
    int i , n;
    FILE * pFile;


    n = read(fd,buffer,100);
    printf("%s", buffer);

    if (strcmp(buffer, "OK") == 0)
    {
        pFile = fopen(path, "r");
        if(pFile != NULL)
        {
            while(fgets(mystring, sizeof(mystring), pFile) != NULL)
            {
                //fputs(mystring, fd);
                write(fd,mystring,strlen(mystring));
            }
        }
        else
        {
            printf("Invalid File or Address \n");
        }

        fclose(pFile);
    }
    else
    {
        printf("%s \n", buffer);
    }
}

Серверный код для чтения сокета

int putRequest(int fd, char buf[], char str[])
{
    char data[256];

    int number;
    char * ptr;
    char results[100];
    int total = 0;
    char *arguments[1024]; 
    char temp[10];
    int i;

    ptr = strtok(buf," ");
    while (ptr != NULL)
    {
        char * temp; 
        temp = (char *)malloc(sizeof(ptr));
        temp = ptr;
        arguments[total] = temp;
        total++;
        ptr = strtok (NULL, " ");
    }

    if(total == 1)
    {
        strcat(str, "Invaild Arguments \n");
        return 1;
    }

    write(fd, "OK", 256);
    FILE * pFile;
    pFile = fopen ("myfile.txt","w");
    if (pFile!=NULL)
    {

        while(read(fd, data, 256) != NULL)
        {

            fputs(data, pFile);
        }

        fclose (pFile);
    }
    else
    {
        strcat(str, "Invaild File");
        return 0;
    }
    strcat(str, "Done");
    return 1;

}

Заранее спасибо и просто опубликуйте что-нибудь, если вам нужно увидеть больше кода. Я просто разместил код, который должен вызывать проблему.

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