このディレクトリの索引

http://pc12.2ch.net/test/read.cgi/tech/1248012902/231
#  【 形態 】Javaアプリケーション(main()で開始)
#  【 課題 】以下のようなサーバプログラムCountServer.javaとクライアントプログラム  
#  CountClient.javaを作成してください。  
#   
#  [条件]  
#  ・サーバは、クライアントから文字列を受信し、その文字数をカウントして  
#   結果をクライアントに返す。  
#  ・クライアントプログラムを実行時に、コマンドラインから、サーバホスト名  
#   java CountClient サーバホスト名 "文字列"  
#  ・クライアントは、サーバからの結果を受け取り、画面に表示する。  
#  ・サーバは、ポート番号 4321 で接続要求を受け付けるようにする。  
#   
#  サーバプログラムの実行  
#  >java CountServer  
#   
#  クライアントプログラムの実行と実行結果  
#  >java CountClient host1 "Java Programming"  
#  16    

server(Port) :-
    socket(internet,stream,Socket),
    socket_bind(Socket,Port),
    repeat,
    socket_listen(Socket),
    socket_accept(Socket,Host : Port2,NewSocket),
    socket_raw_receive(NewSocket,8192,_,_受信コードならび,_実際に受信した長さ),
    atom_codes(_受信した文,_受信コードならび),
    server_1(_受信した文,NewSocket),
    Message = quit,
    socket_shutdown(Socket),!.

server_1(quit,NewSocket,Input,Output) :-
    socket_shutdown(NewSocket),!.
server_1(_受信した文,NewSocket) :-
    atom_codes(Message,L),
    atom_length(Message,Length),
    open(NewSocket,write,Output,[type(binary)]),
    write_formatted(Output,'%t\r\n',[Length]),
    flush_output(Output),
    close(Output),
    socket_shutdown(NewSocket),
    ! .

client(Host,Port) :-
    get_line(_伝送する文),
    socket(internet, stream, Socket),
    socket_connect(Socket, Addr : Port),
    open(Socket,read,Input),
    open(Socket,write,Output),
    write_formatted(Output,'%t\n',[_送信する文]),
    flush_output(Output),
    get_line(Input,_受信した文),
    client_1(_受信した文,Host,Socket,Input,Output),
    close(Input),
    close(Output),
    socket_shutdown(Socket).

client_1(end_of_file,Input,Output) :- !.
client_1(_受信した文,Input,Output) :-
    write_formatted('%t\n',[_受信した文]),
    get_line(Input,_次の受信した文),
    client_1(_次の受信した文,Input,Output).