c - 错误 : request for member ‘sin_addr’ in something not a structure or union

标签 c linux sockets

当我在 Linux 上编译代码(在下面找到)时,gcc 说:

error: request for member ‘sin_addr’ in something not a structure or union

但是我没有发现任何问题。

我是否遗漏了头文件中的任何内容,或者我是否存在一些语法错误?

#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;
}

最佳答案

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

SerIP.sin_addr 没有意义。 SerIP 是一个 char*

关于c - 错误 : request for member ‘sin_addr’ in something not a structure or union,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8562435/

相关文章:

c# - 为什么 TcpClient 与构造函数中的参数连接速度较慢?

c - 为什么 getsockopt 返回错误?

调用isalpha导致段错误

许多目录中的 C 程序编译有延迟

linux - 使用其音频源和开源工具高效生成预转录语音的时间索引

c - UTF-8 和 ISO8859-1 文件

perl - 如何在 Perl 中的线程之间共享文件句柄?

c - 循环被一个值中断

客户端连接失败

linux - 在 qmake (5.0) 生成的 Makefile 中设置 LINK 变量