Когда я скомпилировал код (см. Ниже) в 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;
}