Pracę z tym zagadnieneim rozpoczęliśmy od przetestowania połączenia TCP/IP. Udało nam się nawiązać komunikację klient - serwer, zatem zajęliśmy się zagadnieniem Więźnia.
Kod programu:
:- consult('plnxt.pl').
:- use_module(library(socket)).
create_client :-
tcp_socket(Socket),
tcp_connect(Socket,'10.6.66.46':33809),
tcp_open_socket(Socket,Read,Write),
write(Write,'robot(ewka).'),nl(Write),
close(Read),
close(Write).
normal_go :- trigger_create(_,check_light,change_angle),
trigger_create(_,check_sound,run),
nxt_go(100).
start :-nxt_light_LED(activate, force),
write('start'),
normal_go.
stop :-
trigger_killall,
nxt_stop.
change_angle :-
Angle is 40 + random(60),
nxt_rotate(360, Angle, force), normal_go,
write('zmieniam kat').
check_light :-
nxt_light(Light,force),
Light < 50,
write('znalazlem czarny').
check_sound :-
nxt_sound(Sound,force),
Sound>50,
write('znalazlem czerwony').
run :- create_client,
nxt_go_cm(800,100),
nxt_play_tone(500, 2000), stop.
Drugi robot z którym się komunikowaliśmy nasłuchiwał jako serwer wykorzystując poniższy kod:
create_server :-
tcp_socket(Socket),
tcp_bind(Socket,33808),
tcp_listen(Socket,5),
tcp_open_socket(Socket,_,_),
tcp_accept(Socket, Slave, _), % Akceptacja połaczenia ze strony klienta.
tcp_open_socket(Slave, In, Out),
read(In,Msg), % Odczyt wiadomości.
write(Msg),
close(In),
close(Out).
Działanie robotów obrazuje filmik: Ewka i Irek w więzieniu
Jak widać na filmie, oba roboty jeżdżą wewnątrz więzienia, po usłyszeniu klaśnięciu , Ewka (klient) powoli ucieka, a Irek (serwer) ucieka bardzo szybko.