《UNIX網絡編程》daytimetcpcli測試

對於剛剛接觸網絡的人來講,《UNIX網絡編程》中第一個例子(daytimetcpcli)可能就測試不經過。也許你試着繼續向後讀來,本身寫一個服務程序來解決這個問題,可是daytime服務也是標準服務的一個例子。你也能夠對公網中的daytime服務器進行鏈接測試。linux

下面先給出源代碼,而後介紹如何查找daytime服務器。編程

源代碼

代碼以下:windows

#include "unp.h"

int main(int argc, char **argv)
{
    int sockfd, n;
    char recvline[MAXLINE + 1];
    struct sockaddr_in servaddr;

    if (argc != 2)
        err_quit("usage: a.out <IPaddress>");

    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
        err_sys("socket 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)
        err_quit("inet_pton error for %s", argv[1]);

    if (connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0)
        err_sys("connect error");

    while ((n = read(sockfd, recvline, MAXLINE)) > 0)
    {
        recvline[n] = 0;
        if (fputs(recvline, stdout) == EOF)
            err_sys("fputs error");
    }

    if (n < 0)
        err_sys("read error");

    return 0;
}

查找daytime服務器

能夠在本身的機器上安裝daytime服務,不過楓竹夢沒有成功。服務器

下面介紹如何查看有daytime服務的服務器。經過google搜索來的一些daytime服務器,不是鏈接超時,就是拒絕服務。因爲電腦都會有本身校準時間的功能,推測應該是鏈接遠程的daytime服務。以下網址能夠進行測試:markdown

  • time-a.nist.gov
  • time.windows.com
  • time.nist.gov
  • time-nw.nist.gov
  • timepb.nist.gov

因爲上面的程序不能本身的解析域名的地址,全部手動來處理。使用dig命令來解析域名。網絡

$ ./daytimetcpcli 206.168.112.96
connect error: Connection timed out
$ dig time.nist.gov +short
ntp1.glb.nist.gov.
128.138.141.172
$ ./daytimetcpcli 128.138.141.172

57308 15-10-13 08:34:28 20 0 0 942.1 UTC(NIST) * 
$

如上的測試成功了,能夠繼續學習了。socket

更多請參考網絡編程tcp

相關文章
相關標籤/搜索