32 lines
741 B
Prolog
32 lines
741 B
Prolog
:- module(echo_server, [echo_server/0,
|
|
echo_server/1]).
|
|
|
|
:- use_module(library(format)).
|
|
:- use_module(library(sockets)).
|
|
|
|
|
|
echo_server :-
|
|
echo_server('127.0.0.1').
|
|
|
|
|
|
echo_server(Addr) :-
|
|
socket_server_open(Addr:Port, ServerSocket),
|
|
format("echo_server: connection opened at ~w:~d~n", [Addr, Port]),
|
|
socket_server_accept(ServerSocket, Client, Stream, [eof_action(eof_code)]),
|
|
format("echo_server: connection accepted from ~a~n", [Client]),
|
|
!,
|
|
echo_loop(Stream),
|
|
socket_server_close(ServerSocket).
|
|
|
|
|
|
echo_loop(Stream) :-
|
|
read_term(Stream, Term, []),
|
|
( Term == end_of_file ->
|
|
true
|
|
;
|
|
format("received: ~w~n", [Term]),
|
|
!,
|
|
echo_loop(Stream)
|
|
).
|
|
|