无法包含<sys socket.h =“”>和<arpa inet.h =“”> </arpa> </sys>

时间:2013-01-28 05:17:54

标签: c sockets

我为客户端和服务器创建了一个C程序,用于将数据从一台计算机传输到另一台计算机。 以下代码

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <iostream.h>

void main()
{
    int sockfd;
    struct sockaddr_in saddr;
    char *xyz,xyz1;
    sockfd = socket(AF_INET,SOCK_STREAM,0);
    saddr.sin_family = AF_INET;
    saddr.sin_port=htons(5001);
    saddr.sin_addr.s_addr = inet_aton("192.168.0.254");
    connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
    fgets(xyz);
    write(sockfd,xyz,sizeof(xyz));
    read(sockfd,xyz1,sizeof(xyz1));
    fputs(xyz);
    close(sockfd);
}               

但它在trubo c ++ 3.0 IDE中显示以下错误

  UNABLE TO OPEN INCLUDE FILE 'SYS/SOCKET.H'
  UNABLE TO OPEN INCLUDE FILE 'NETINET/IN.H'
  UNABLE TO OPEN INCLUDE FILE 'ARPA/INET.H'

1 个答案:

答案 0 :(得分:5)

没有标准指定Turbo C ++ 3.0支持的sys/socket.h文件。例如,SuS v2IEEE 1003.1需要这样的标头,但TC ++ 3.0不支持其中任何一个。要么使用支持您计划编程的标准的编译器,要么只使用编译器支持的标准编程。

哦,你的代码有很多错误:

       char *xyz,xyz1;
       sockfd = socket(AF_INET,SOCK_STREAM,0);
       saddr.sin_family = AF_INET;
       saddr.sin_port=htons(5001);
       saddr.sin_addr.s_addr = inet_aton("192.168.0.254");
       connect(sockfd,(struct sockaddr *)&saddr,sizeof(saddr));
       fgets(xyz);

您没有将xyz设置为任何特定值。您不能通过将其传递给fgets来使用其值。你正在传递fgets随机垃圾发生在未初始化的指针中。

       write(sockfd,xyz,sizeof(xyz));

由于xyz是指针,sizeof(xyz)sizeof(char *)相同。你想写一些字节数等于平台上指针的大小?您需要告诉write您希望它写入多少字节,而不是指针的大小。而且,xyz再次指出任何东西,所以你不能使用它的价值。你正在传递write未初始化变量的垃圾值。

       read(sockfd,xyz1,sizeof(xyz1));

同样,您使用的sizeof(xyz1)sizeof(char *)相同,而不是您想要的。在将xyz1设置为任何内容之前,您还可以将read的值传递给read。它没有指向任何内容,因此您无法使用它来告诉 fputs(xyz); 将结果放在何处。

fputs

对于C风格的字符串,fputs函数仅 。您从套接字读取的数据只是原始数据,它不是C风格的字符串。因此,您无法将其传递给read。你丢弃fputs的返回值,所以你不知道你读了多少字节 - 你期望{{1}}知道要写多少字节?

显然,你刚开始学习C.你必须是一个使用22岁的编译器的受虐狂。为了所有圣洁的缘故,我希望你不要试图在它上面学习C ++,因为你将学习现代C ++的一切完全错误并重新回归。我们这些长期以来一直在编程C ++的人不得不为了忘掉旧的东西而付出很大的痛苦 - 如果你不需要,就不要把自己放在那里。