システムプログラム02-ver00_server

「システムプログラム02-ver00_server」の編集履歴(バックアップ)一覧はこちら

システムプログラム02-ver00_server - (2010/07/13 (火) 20:58:17) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

/* * ポート番号9000を使用する */ #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #define NSTRS 3 /* 文字列の個数 */ /* * クライアントに送る文字列 */ char *strs[NSTRS] = { "This is the first string from the server.\n", "This is the second string from the server.\n", "This is the third string from the server.\n" }; extern int errno; int main(int ac, char *av[]){ char c; FILE *fp; int fromlen; char hostname[64]; struct hostent *hp; register int i,s,ns; struct sockaddr_in sin, fsin; /* * 何はともあれ、ホストネームを取得 */ gethostname(hostname,sizeof(hostname)); /* * ホストネームのネットワーク番号を取得 */ if((hp=gethostbyname(hostname))==NULL){ fprintf(stderr,"%s: unknown host.\n", hostname); exit(1); } /* * ソケットを取得、このソケットはインターネットドメインで、ストリーム型 */ if((s=socket(AF_INET,SOCK_STREAM,0))<0){ perror("clisent: socket"); exit(1); } /* アドレス構造体を作成する。ここではポート番号 9000を * 使用する */ sin.sin_family=AF_INET; sin.sin_port=htons(9000); /* * bcopy(hp->h_addr,&sin.sin_addr,hp->h_length); * の代わりに、以下の INADDR_ANY を用いる */ sin.sin_addr.s_addr=htonl(INADDR_ANY); /* * アドレスとソケットを対応づける */ if(bind(s,(struct sockaddr*)&sin,sizeof(sin))<0){ perror("server: bind"); exit(1); } /* * ソケットを通じて、サービス要求があるかどうか待機する */ if(listen(s,5)<0){ perror("server:listen"); exit(1); } /* * サービス要求があれば、それを受理して、接続を確立する。 * 通信路を確立すると、ファイルディスクリプタ ns は * クライアント側と繋がったものになる。 * fsinにはクライアント側のアドレスが格納される。 */ if((ns=accept(s,(struct sockaddr*)&fsin, &fromlen)) <0){ perror("server:accept"); exit(1); } /* * ソケット経由で、ファイルを読み出すファイルポインタ */ fp=fdopen(ns,"r"); /* * まず文字列をクライアントに送る */ for(i=0;i<NSTRS;i++) send(ns,strs[i],strlen(strs[i]),0); /* * そして、クライアントから文字列を読み出す */ for(i=0;i<NSTRS;i++){ while((c=fgetc(fp))!=EOF){ putchar(c); if(c=='\n') break; } } /* * ここで単に close() を呼び出して、接続を切る */ close(s); exit(0); }

表示オプション

横に並べて表示:
変化行の前後のみ表示: