網絡編程1 請求時間客戶端程序

學習網絡編程第一天~

客戶端程序:

#include "unp.h"
//該頭文件包含了大部分網絡程序所需要的系統頭文件
int main(int argc , char **argv){
    int sockfd,n;
    char recvline[MAXLINT+1];
    struct sockaddr_in servaddr;
    if(argc !=2 )
        err_quit("usage:a.out < IPaddress>");

    if((sockfd = socket(AF_INET,SOCK_STREAM,0)<0))//調用socket函數創建一個網際字節流(AF_INET)套接字,並使用sockfd來描述它
        err_sys("socket error");//如果調用出錯,就使用err_sys來終止,err_sys輸出錯誤描述

    bzero(&servaddr,sizeof(servaddr));//bzero類似於memset,將數組清空
    servaddr.family = AF_INET;//置地址族爲AF_INET
    servaddr.sinport() = htons(13);//端口號爲13(一個經常使用的端口),htons 主機到網絡短整數,轉換二進制端口號
    if(inet_pton(AF_INET,argv[1],&servaddr.sin_addr)<=0)//inet_pton(呈現形式到數值),把ASCII轉換爲合適的格式
        err_quit("*inet_pton err for %s", argv[1]);
    if(connect(sockfd,(SA *) &servaddr,sizeof(servaddr))<0)//與第二個參數指定的套接字地址建立一個長度爲第三個參數的TCP連接
        err_sys("connect error");
    while((n=read(sockfd,recvline,MAXLINT))>=0){//返回0的時候是關閉,返回負值的時候是發生了錯誤
        recvline[n]=0;
        if(fputs(recvline,stdout)== EOF)
            err_sys("fputs error");
    }
    if(n<0)
        err_sys("read error");
    exit(0);
}

服務器端程序:

#include "unp.h"
#include <time.h>

int main(int argc,char argv**){//命令行整數,和,字符串
    int listenfd,connfd;
    struct sockaddr_in,servaddr;
    char buff[MAXLINE];
    time_t ticks;

    listenfd = Socket(AF_INET,SOCK_STREAM,0);//創建一個套接字
    /*  這裏是一個包裹函數
        int Socket(int family,int type,int protocol){
            int  n;
            if(n=socket(family,type,protocol)<0)
                err_sys("socket error");
            return n;
        }
    */

    bzero (&servaddr,sizeof(servaddr));//清0
    servaddr.sin_family = AF_INET;//ipv4地址協議族
    servaddr.sin_addr.s_addr = htonl(INTADDR_ANY);//指定IP地址
    servaddr.sin_port=htons(13);

    Bind(listenfd,(SA*)&servaddr,sizeof(servaddr));//將一個本地協議地址賦值給一個套接字

    Listen(listenfd,LISTENQ);//把套接字轉換爲監聽套接字,LISTENQ是系統內核允許連接的最大連接數

    for(;;){
        connfd = Accept(listenfd,(SA *)NULL,NULL);//三路握手,在這個過程中,可能會進行休眠

        ticks=time(NULL);//
        snprintf(buff,sizeof(buff),"%.24s\r\n",ctime(&ticks));//ticks,是一個秒數,ctime 將秒數轉換爲標準日期格式
        Write(connfd,buff,strlen(buff));
        Close(connfd);
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章