ошибка: запрос на член 'sin_addr' в чем-то не структура или объединение - PullRequest
0 голосов
/ 19 декабря 2011

Когда я скомпилировал код (см. Ниже) в Linux, gcc сказал:

ошибка: запрос на член 'sin_addr' в чем-то, не являющемся структурой или объединением

но я не нашел никаких проблем.

Я что-то упустил из заголовочных файлов или у меня есть некоторые синтаксические ошибки?

#include <sys/socket.h>
#include <unistd.h>
#include <stdio.h>
#include <netinet/in.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>

#define _PORT_ 98

char *SerIP = "127.0.0.1";
char *File;

int main(int argc, char *argv[])
{
    int Clisock, Sersock;
    struct sockaddr_in SerInfo, CliInfo;
    int filefd, nByte;
    char buf[BUFSIZ];

    if(argc < 2)
    {
        fputs("Too less arguments!\n", stderr);
        exit(1);
    }
    memset(&CliInfo, 0, sizeof(CliInfo));
    File = argv[1];

    SerInfo.sin_family = AF_INET;
    if(inet_pton(AF_INET, SerIP, &SerIP.sin_addr.s_addr) < 0)
    {
        perror("inet_pton");
        exit(1);
    }
    SerInfo.sin_port = htons(_PORT_);

    if ((Clisock = socket(AF_INET, SOCK_STREAM, 0)) < 0)
    {
        perror("scoket");
        exit(1);
    }

    if(connect(Clisock, (struct sockaddr*)&SerInfo, sizeof(SerInfo)) < 0)
    {
        perror("connect");
        exit(1);
    }
    while (1)
    {
        filefd = open(File, O_RDONLY);
        while((nByte = read(filefd, buf, BUFSIZ)) > 0)
        {
            if(send(Clisock, buf, nByte, 0) < 0)
            {
                perror("send");
                exit(1);
            }
            if(nByte < BUFSIZ)
            {
                send(Clisock, "END", 3, 0);
                break;
            }

        }
        send(Clisock, "END", 3, 0);
        break;
    }
    close(Clisock);
    close(filefd);
    return 0;
}

Ответы [ 2 ]

1 голос
/ 19 декабря 2011

AFAICS SerIP - это массив символов, а не union или struct. Таким образом, ошибка.

1 голос
/ 19 декабря 2011
if(inet_pton(AF_INET, SerIP, &SerIP.sin_addr.s_addr) < 0)

SerIP.sin_addr не имеет смысла. SerIP является char*.

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