UNIX 網絡編程學習
阿新 • • 發佈:2017-11-19
stream stdio.h 運行 init amp mil struct gcc 是否
a.述
書買很久了,好好學習下.O(∩_∩)O 只寫程序,原理什麽的,先不寫了.
b.環境
deepin15.4.1 64位
vs code
gcc version 6.4.0 20170724 (Debian 6.4.0-2)
虛擬機裏跑的 沒在物理機安裝
1.2一個簡單的時間獲取程序
/** * TCP_getDayTime.c * 安裝時間服務 * sudo apt-get install xinetd -y * * 修改yes 為 no * sudo vi /etc/xinetd.d/daytime * * 重啟服務 * /etc/init.d/xinetd restart * 服務是否正確 * nc 127.0.0.1 13 * * * 編譯 gcc TCP_getDayTime.c -o TCP_getDayTime * 運行 ./TCP_getDayTime 127.0.0.1 * */ #include <stdlib.h> #include <unistd.h> #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <errno.h> /*錯誤處理*/ void err_exit(char * err){ printf("\n---error at %s---- \n",err); exit(errno); } int main(int argc, char ** argv) { int sockfd, n; char recvline[1024 + 1]; struct sockaddr_in servaddr; if (argc < 2) { err_exit("argc < 2"); } 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_exit("inet_pton()"); } if ((sockfd = socket(AF_INET, SOCK_STREAM, 0) ) <0) { err_exit("socket()"); } if (connect(sockfd, (struct sockaddr *)&servaddr, sizeof(struct sockaddr))<0) { err_exit("connect()"); } while ((n = read(sockfd, recvline, 1024)) > 0) { recvline[n]=0;/* 0==‘0‘ */ if(fputs(recvline, stdout)==EOF){ err_exit("fputs()"); } if(n<0){ err_exit("n<0"); } } return 0; }
UNIX 網絡編程學習