下面的程序用户获取主机的日期:
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<netdb.h>
int main()
{
int sockfd;
int len,result;
struct sockaddr_in addr;
struct servent *servinfo;
char buffer[128];
servinfo=getservbyname("daytime","tcp");
if (!servinfo)
{
printf("no daytime service!/n");
return 1;
}
printf("daytime service port is :%d %s %s/n",ntohs(servinfo->s_port),servinfo->s_name,servinfo->s_proto);
sockfd=socket(AF_INET,SOCK_STREAM,0);
addr.sin_family=AF_INET;
addr.sin_port=servinfo->s_port;
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
len=sizeof addr;
result=connect(sockfd,(struct sockaddr *)&addr,len);
if (result==-1)
{
printf("Connect error!/n");
return 1;
}
result=read(sockfd,buffer,sizeof buffer);
buffer[result]='/0';
printf("daytime return:%s/n",buffer);
close(sockfd);
return 0;
}
要特别住的的是,linux默认情况下没有开启daytime服务,所以必须现打开,否则得到的结果是Connect error!
要开启服务,可编辑/etc/inetd.conf但是后来改成了/etc/xinetd.conf,也可用图形界面。。。。
#include<sys/socket.h>
#include<stdio.h>
#include<netinet/in.h>
#include<netdb.h>
int main()
{
int sockfd;
int len,result;
struct sockaddr_in addr;
struct servent *servinfo;
char buffer[128];
servinfo=getservbyname("daytime","tcp");
if (!servinfo)
{
printf("no daytime service!/n");
return 1;
}
printf("daytime service port is :%d %s %s/n",ntohs(servinfo->s_port),servinfo->s_name,servinfo->s_proto);
sockfd=socket(AF_INET,SOCK_STREAM,0);
addr.sin_family=AF_INET;
addr.sin_port=servinfo->s_port;
addr.sin_addr.s_addr=inet_addr("127.0.0.1");
len=sizeof addr;
result=connect(sockfd,(struct sockaddr *)&addr,len);
if (result==-1)
{
printf("Connect error!/n");
return 1;
}
result=read(sockfd,buffer,sizeof buffer);
buffer[result]='/0';
printf("daytime return:%s/n",buffer);
close(sockfd);
return 0;
}
要特别住的的是,linux默认情况下没有开启daytime服务,所以必须现打开,否则得到的结果是Connect error!
要开启服务,可编辑/etc/inetd.conf但是后来改成了/etc/xinetd.conf,也可用图形界面。。。。