书中1-5的程序如下所示,稍作修改,不用引用unp.h文件。
#include<stdio.h>
#include<errno.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<string.h>
#define MAXLINE 1024
int main(int argc,char **argv)
{
int count=0;
int sockfd,n;
char recvline[MAXLINE+1];
struct sockaddr_in servaddr;
if(argc!=2)
printf("error");
if((sockfd=socket(AF_INET,SOCK_STREAM,0))<0)
perror("sock error");
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(13);
if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)
perror("inet_pton error");
if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)
perror("connect error");
while((n=read(sockfd,recvline,MAXLINE))>0)
{
count++;
recvline[n]=0;
if(fputs(recvline,stdout)==EOF)
perror("fputs error");
}
printf("%d\n",count);
if(n<0)
printf("read error");
exit(0);
}
编译连接:
gcc 1-5.c -o 1-5
运行:
./1-5 127.0.0.1
如果事先没有搭建时间获取服务器,会出现该端口没有开启相应的服务,类似如下:
connect error: Connection refused
这时候需要搭建并开启时间获取服务器。
搭建方式如下:
1.安装xinetd,这是一个系统服务管理的程序 yum install xinetd
2.进入目录,修改配置文件
cd /etc/xinetd.d
修改daytime-stream和daytime-dgram
将disable = yes
改为:disable = no
3.重新启动服务
service xinetd restart
到此,环境配置完成。
重新运行程序,得到结果:
12 NOV 2013 10:30:00 CST