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

Sum*_*ngh -1 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);
}               
Run Code Online (Sandbox Code Playgroud)

但它在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'
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 5

没有标准指定sys/socket.hTurbo C++ 3.0支持的文件.例如,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);
Run Code Online (Sandbox Code Playgroud)

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

       write(sockfd,xyz,sizeof(xyz));
Run Code Online (Sandbox Code Playgroud)

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

       read(sockfd,xyz1,sizeof(xyz1));
Run Code Online (Sandbox Code Playgroud)

再次,你使用sizeof(xyz1),这是相同的,sizeof(char *)而不是你想要的.在将其设置为任何xyz1值之前,您还可以使用它的值,将其传递给read它.它没有指向任何东西,所以你不能用它来告诉read它的结果.

       fputs(xyz);
Run Code Online (Sandbox Code Playgroud)

fputs函数适用于C风格的字符串.您从套接字读取的数据只是原始数据,它不是C风格的字符串.所以你不能把它传递给fputs.你扔掉了返回值read,所以你不知道你读了多少字节 - 你怎么fputs想知道要写多少字节?

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