UNIX 獲取服務器時間客戶端程序
阿新 • • 發佈:2018-03-18
socket開始學習大師之作《UNIX 網絡編程》,唯一不喜歡的是包裹函數
#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>"); /* * socket 函數創建一個網際(AF_INET)字節流(SOCK_STREAM)套接字 * sockfd 是一個小整數描述符,唯一標示一次套接字連接活動 * int socket(int domain, int type, int protocol) * domain 通信協議的族 * PF_UNIX,PF_LOCAL 本地通信 PF_X25 ITU-T X25 / ISO-8208協議 * AF_INET,PF_INET IPv4 Internet協議 PF_AX25 Amateur radio AX.25 * PF_INET6 IPv6 Internet協議 PF_ATMPVC 原始ATM PVC訪問 * PF_IPX IPX-Novell協議 PF_APPLETALK Appletalk * PF_NETLINK 內核用戶界面設備 PF_PACKET 底層包訪問 */ 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); /* port 13 daytime server */ if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)//從argv[1] 中獲取IP地址,並且格式化 err_quit("inet_pton error for %s", argv[1]); /* * int connect(int s, const struct sockaddr * name, int namelen) * s:標識一個未連接socket * name:指向要連接套接字的sockaddr結構體的指針 * namelen:sockaddr結構體的字節長度 */ if (connect(sockfd, (SA *) &servaddr, sizeof(servaddr)) < 0)//servaddr 轉 sockaddr err_sys("connect error"); while ( (n = read(sockfd, recvline, MAXLINE)) > 0) { recvline[n] = 0; /* null terminate */ if (fputs(recvline, stdout) == EOF) err_sys("fputs error"); } if (n < 0) err_sys("read error"); exit(0); }
UNIX 獲取服務器時間客戶端程序