错误:在非结构或联合的东西中请求成员'sin_addr'

时间:2011-12-19 14:01:22

标签: c linux sockets

当我在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 个答案:

答案 0 :(得分:1)

if(inet_pton(AF_INET, SerIP, &SerIP.sin_addr.s_addr) < 0)

SerIP.sin_addr毫无意义。 SerIPchar*

答案 1 :(得分:1)

AFAICS SerIP是一个字符数组,而不是unionstruct。因此错误。