Нужно ли нам писать собственный arpa / inet.h? [закрыто]

#include <stdio.h> /* standard C i/o facilities */ #include <stdlib.h> /* needed for atoi() */ #include <unistd.h> /* defines STDIN_FILENO, system calls,etc */ #include <sys/types.h> /* system data type definitions */ #include <sys/socket.h> /* socket specific definitions */ #include <netinet/in.h> /* INET constants and stuff */ #include <arpa/inet.h> /* IP address conversion stuff */ #include <netdb.h> /* gethostbyname */ /* this routine echos any messages (UDP datagrams) received */ #define MAXBUF 1024*1024 void echo( int sd ) { int len,n; char bufin[MAXBUF]; struct sockaddr_in remote; /* need to know how big address struct is, len must be set before the call to recvfrom!!! */ len = sizeof(remote); while (1) { /* read a datagram from the socket (put result in bufin) */ n=recvfrom(sd,bufin,MAXBUF,0,(struct sockaddr *)&remote,&len); /* print out the address of the sender */ printf("Got a datagram from %s port %d\n", inet_ntoa(remote.sin_addr), ntohs(remote.sin_port)); if (n<0) { perror("Error receiving data"); } else { printf("GOT %d BYTES\n",n); /* Got something, just send it back */ sendto(sd,bufin,n,0,(struct sockaddr *)&remote,len); } } } /* server main routine */ int main() { int ld; struct sockaddr_in skaddr; int length; /* create a socket IP protocol family (PF_INET) UDP protocol (SOCK_DGRAM) */ if ((ld = socket( PF_INET, SOCK_DGRAM, 0 )) < 0) { printf("Problem creating socket\n"); exit(1); } /* establish our address address family is AF_INET our IP address is INADDR_ANY (any of our IP addresses) the port number is assigned by the kernel */ skaddr.sin_family = AF_INET; skaddr.sin_addr.s_addr = htonl(INADDR_ANY); skaddr.sin_port = htons(0); if (bind(ld, (struct sockaddr *) &skaddr, sizeof(skaddr))<0) { printf("Problem binding\n"); exit(0); } /* find out what port we were assigned and print it out */ length = sizeof( skaddr ); if (getsockname(ld, (struct sockaddr *) &skaddr, &length)<0) { printf("Error getsockname\n"); exit(1); } /* port number's are network byte order, we have to convert to host byte order before printing ! */ printf("The server UDP port number is %d\n",ntohs(skaddr.sin_port)); /* Go echo every datagram we get */ echo(ld); return(0); }

Я новичок в Linux и загрузил linux на zedboard после некоторых уроков. Теперь я должен создать прикладную программу, которая запускает udp echo server поверх нее, и я получил эту программу через Интернет, и теперь я смущен тем, доступны ли arinet / inet.h netinet / in.h в linux или мы должны сделать те? и как и где следует указывать IP-адрес и номера портов?

1
задан 25 June 2017 в 12:43

2 ответа

Нет, вам не нужно писать свои собственные arpa/inet.h или netinet/in.h - они предоставляются пакетом libc6-dev:

$ dpkg -L libc6-dev | grep 'arpa\|netinet' /usr/include/arpa /usr/include/arpa/nameser_compat.h /usr/include/arpa/telnet.h /usr/include/arpa/tftp.h /usr/include/arpa/inet.h /usr/include/arpa/nameser.h /usr/include/arpa/ftp.h /usr/include/netinet /usr/include/netinet/igmp.h /usr/include/netinet/in_systm.h /usr/include/netinet/ip.h /usr/include/netinet/tcp.h /usr/include/netinet/if_fddi.h /usr/include/netinet/ip_icmp.h /usr/include/netinet/ip6.h /usr/include/netinet/ether.h /usr/include/netinet/if_tr.h /usr/include/netinet/udp.h /usr/include/netinet/if_ether.h /usr/include/netinet/icmp6.h /usr/include/netinet/in.h
2
ответ дан 18 July 2018 в 11:08

Нет, вам не нужно писать свои собственные arpa/inet.h или netinet/in.h - они предоставляются пакетом libc6-dev:

$ dpkg -L libc6-dev | grep 'arpa\|netinet' /usr/include/arpa /usr/include/arpa/nameser_compat.h /usr/include/arpa/telnet.h /usr/include/arpa/tftp.h /usr/include/arpa/inet.h /usr/include/arpa/nameser.h /usr/include/arpa/ftp.h /usr/include/netinet /usr/include/netinet/igmp.h /usr/include/netinet/in_systm.h /usr/include/netinet/ip.h /usr/include/netinet/tcp.h /usr/include/netinet/if_fddi.h /usr/include/netinet/ip_icmp.h /usr/include/netinet/ip6.h /usr/include/netinet/ether.h /usr/include/netinet/if_tr.h /usr/include/netinet/udp.h /usr/include/netinet/if_ether.h /usr/include/netinet/icmp6.h /usr/include/netinet/in.h
2
ответ дан 24 July 2018 в 19:43

Другие вопросы по тегам:

Похожие вопросы: