1. 程式人生 > >UNIX 網絡編程學習

UNIX 網絡編程學習

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 網絡編程學習