このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1248012902/442
#  【 課題 】h ttp://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/820.txt 
#  【 形態 】2. Applet 
# 1)各自のPC1とPC2のそれぞれにサーバーをたてる。
# サーバー1,2:メッセージを受け、自分のメッセージを付加(アペンド)して返す。
# 
# 2)その両方のサーバーに交信する以下のクライアントを作成する。
# クライアント:一方のサーバーにメッセージを送り、
# サーバーは、それまでにクライアントから来たメッセージを貯め、まとめて返す。
# Localhostではなく実際にipアドレスを確認し、複数のプロセッサ間の動作を
# 確認すること。

サーバー(_舫い) :-
  socket(internet,stream,Socket),
  socket_bind(Socket,_舫い),
  サーバー(_舫い,[]),
  socket_shutdown(Socket).

サーバー(_舫い,['shutdown -h server'|_]) :- !.
サーバー(_舫い,_メッセージならび) :-
  socket_listen(Socket),
  socket_accept(Socket,Host : _舫い2,NewSocket),
  open(NewSocket,read,Input),
  open(NewSocket,write,Output),
  get_line(Input,Line),
  append(_メッセージならび,[Line],_メッセージならびの二),
  サーバーメッセージの送信(Output,_メッセージならびの二),
  close(Input),
  close(Output).
  socket_shutdown(NewSocket),
  サーバー(_舫い,_メッセージならびの二).

サーバーメッセージの送信(Output,_メッセージならび) :-
  member(_メッセージ,_メッセージならび),
  put_line(Output,_メッセージ),
  fail.
サーバーメッセージの送信(Output,_).


クライアント(_ホスト,_舫,_送信メッセージ,_受信メッセージ) :-
    クライアント通信確立(_ホスト, _舫, _差し込み口),
    open(_差し込み口, read, _入力),
    open(_差し込み口, write, _出力),
    クライアント送受信(_ホスト,_舫,_送信メッセージ,
                        _入力, _出力,_受信文字コードならび),
    close(_入力),
    close(_出力),
    socket_shutdown(_差し込み口),
    atom_codes(_受信文字列,_受信文字コードならび),!.

クライアント(_ホスト,_舫,_差し込み口) :-
    クライアント通信確立(_ホスト, _舫, _差し込み口),
    open(_差し込み口, read, _入力),
    open(_差し込み口, write, _出力),
    write('サーバーに送信するメッセージを入れてください : '),
    get_line(_送信メッセージ),
    クライアント送受信(_ホスト,_舫,_送信メッセージ,
                        _入力, _出力,_受信文字コードならび),
    close(_入力),
    close(_出力),
    socket_shutdown(_差し込み口),
    atom_codes(_受信文字列,_受信文字コードならび),
    write_formatted('受信した文字列は %t \n',[_受信文字列]).

クライアント通信確立(_ホスト, _サービス, _差し込み口)
  :-
    定数(_サービス), !,
    net_service(_サービス, tcp, _舫),
    socket(internet, stream, _差し込み口),
    host_addr(_ホスト, Addr),
    socket_connect(_差し込み口, Addr : _舫).

クライアント通信確立(_ホスト, _舫, _差し込み口)
  :-
    整数(_舫), !,
    socket(internet, stream, _差し込み口),
    socket_connect(_差し込み口, _ホスト : _舫).

クライアント(_ホスト,_舫,_送信メッセージ,_受信メッセージ) :-


クライアント送受信(_ホスト,_舫,_送信メッセージ,_入力,_出力,_受信文字コードならび)
  :-
    write_formatted(_出力,'%t\n\n',[_送信メッセージ]),
    flush_output(_出力),
    get_code(_入力,Code),
    クライアント受信(_入力,Code,_受信文字コードならび).

クライアント受信(_入力,(-1),[]) :- !.
クライアント受信(_入力,_文字コード,[_文字コード|R]) :-
      get_code(_入力,_文字コード2),
      クライアント受信(_入力,_文字コード2,R).