用socket获取主机的信息

来源:互联网 发布:bitcomet端口阻塞问题 编辑:程序博客网 时间:2024/06/05 13:28
下面的程序用户获取主机的日期:

#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,也可用图形界面。。。。