テスト3 8週目

クライアント:
#include " csapp.h " 
int型のmain(int型のargc、char型 ** ARGV)
{
    int型clientfd、ポート。
    CHAR * ホスト、BUF [MAXLINE]。
    rio_tのリオ。
    もし(のargc!= 3 ){
        関数fprintf(stderrに、" 使用:%S <ホスト>、<ポート> \ n "、ARGV [ 0 ])。
        出口(0 );
    }
    ホスト = ARGV [ 1 ]。
    ポート = ATOI(ARGV [ 2 ])。
    clientfd = Open_clientfd(ホスト、ポート)。
    Rio_readinitb( リオ、clientfd)。
    しばらく(関数fgets(bufは、MAXLINE、STDIN)!= NULL){
        Rio_writen(clientfd、BUF、strlenを(BUF))。
        Rio_readlineb( リオ、BUF、MAXLINE)。
        Fputs(BUF、STDOUT)。
    }
    閉じる(clientfd)。
    出口(0 );
}
サーバー:
書式#include <stdio.hに> 
する#include <stdlib.h>に含ま
の#include " csapp.h " 
の#include <TIME.H>
 無効エコー(int型connfd)。
int型のmain(int型のargc、char型 ** ARGV)
{
    int型listenfd、connfd、ポート、clientlen。
    構造体CLIENTADDRのsockaddr_in。
    構造体たhostent * 馬力。
    char * haddrp。
    もし(のargc!= 2 ){
    関数fprintf(stderrに、" 使用:%S <ポート> \ n "、ARGV [ 0 ])。
    出口(0 );
    }
    ポート = ATOI(ARGV [ 1 ])。
    listenfd = Open_listenfd(ポート)。
    一方、1 ){
    clientlen = はsizeof (CLIENTADDR)。
    connfd =(listenfd、(SA *)&CLIENTADDRを、&受け入れclientlen)。
    / * ドメイン名とクライアントのIPアドレスを決定* / 
    馬力 =はgethostbyaddr((のconst  のchar *)&clientaddr.sin_addr.s_addr、 
                はsizeof (clientaddr.sin_addr.s_addr)、AF_INETを)。
    haddrp = INET_NTOA(clientaddr.sin_addr)。
    printf(" %sと接続されたサーバ(%S)\ n "、HP-> h_name、haddrp)。
    エコー(connfd)。
    閉じる(connfd)。
    }
    出口(0 );
}
無効エコー(int型connfd)
{
    size_tのN;
    チャーBUF [MAXLINE]。
    rio_tのリオ。
    
    Rio_readinitb( リオ、connfd)。
    一方、((N = Rio_readlineb(&リオ、BUF、MAXLINE))!= 0 ){
        printf(" クライアントIP:127.0.0.1 \ N- " );
        printf(" サーバーの実装学生ID:20155230 \ N- " );
        printf(" サーバは、%Dバイト\ nは受信" 、N)。
        time_tのトン;
        時間(T)。
        printf(" 現在の時刻:%S \ N- "、CTIME(&T));
        Rio_writen(connfd、BUF、N)。
    }
}

 

おすすめ

転載: www.cnblogs.com/fakerli/p/11939725.html