クライアント: #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)。 } }