11.网络编程之四

来源:互联网 发布:湖南网络系统集成商 编辑:程序博客网 时间:2024/06/06 12:29

【代码1】test_gethostbyname.c

#include "header.h"extern int h_errno;int main(int argc, char *argv[]){if (2 > argc) {fprintf(stderr, "Usage : %s + hostname\n", argv[0]);exit(1);}struct hostent *host;if (NULL == (host = gethostbyname(argv[1]))) {fprintf(stderr, "gethostbyname : %s\n", strerror(h_errno));exit(1);}printf("offical host name is %s\n", host->h_name);char **alias;printf("alias list : \n");for (alias = host->h_aliases; *alias; alias++)printf("%s\n", *alias);printf("addr list : \n");for (alias = host->h_addr_list; *alias; alias++)printf("%s\n", inet_ntoa(*(struct in_addr *)*alias));exit(0);}

【代码2】test_gethostname.c

#include "header.h"int main(int argc, char *argv[]){char name[65];memset(name, 0, sizeof(name));if (0 > gethostname(name, sizeof(name)))err_exit("gethostname");printf("host name is %s\n", name);exit(0);}

【代码3】test_multicast_receiver.c

#include "header.h"int main(int argc, char *argv[]){int sockfd = -1;if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, 0)))err_exit("socket");struct ip_mreqn mreqn;memset(&mreqn, 0, sizeof(mreqn));mreqn.imr_multiaddr.s_addr = inet_addr("224.12.34.56"); /* IP multicast group address */mreqn.imr_address.s_addr = htonl(INADDR_ANY);   /* IP address of local interface */mreqn.imr_ifindex = 0;   /* interface index */if (0 > setsockopt(sockfd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreqn, sizeof(mreqn)))err_exit("setsockopt");struct sockaddr_in myself;memset(&myself, 0, sizeof(myself));myself.sin_family = AF_INET;myself.sin_port = htons(20000);myself.sin_addr.s_addr = inet_addr("0");if (0 > bind(sockfd, (struct sockaddr *)&myself, sizeof(myself)))err_exit("bind");char buf[BUFSIZ];while(1) {recvfrom(sockfd, buf, sizeof(buf), 0, NULL, NULL);printf("%s", buf);fflush(stdout);}exit(0);}

【代码4】test_multicast_sender.c

#include "header.h"int main(int argc, char *argv[]){int sockfd = -1;if (0 > (sockfd = socket(AF_INET, SOCK_DGRAM, 0)))err_exit("socket");struct sockaddr_in receiver;memset(&receiver, 0, sizeof(receiver));receiver.sin_family = AF_INET;receiver.sin_port = htons(20000);receiver.sin_addr.s_addr = inet_addr("224.12.34.56");char buf[BUFSIZ];while(1) {fgets(buf, sizeof(buf), stdin);sendto(sockfd, buf, strlen(buf) + 1, 0, (struct sockaddr *)&receiver, sizeof(receiver));}exit(0);}

【代码5】test_sigaction.c

#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <signal.h>#include <unistd.h>void handler(int signum){alarm(2);printf("in handler...\n");return ;}int main(int argc, char *argv[]){struct sigaction act;char buf[30];sigaction(SIGALRM, NULL, &act);act.sa_handler = handler;act.sa_flags &= ~SA_RESTART;//act.sa_flags |= SA_RESTART;sigaction(SIGALRM, &act, NULL);while(1) {alarm(2);if (NULL == fgets(buf, 30, stdin)) {fprintf(stderr, "fgets : %s\n", strerror(errno));fprintf(stderr, "you do not input in 2 seconds\n");} else {printf("input : %s\n", buf);}}return 0;}