(nil let ((s ('socket newobject)))
(s connect 80 "mysite.org")
(s write (("GET /index.html HTTP/1.1" + (13 char) (10 char)
"Host: mysite.org" (13 char) (10 char)
(13 char) (10 char)) byte-vector))
(nil let (buf (bufsize 1024) res)
(nil setq buf ('byte-vector newobject bufsize))
(nil do-while
(nil setq res (s read buf bufsize))
(nil if (nil numberp res)
(nil progn
(res for* i
(cout write ((buf elt i) char)))
(res > 0))
(nil progn
(cout writeln "Error: " res)
false))))
(s close))
Подключение используя порт 80 к сайту mysite.org. Посылка пакета данных, с синтаксисом и порядком HMTL стандарта. Чтение ответных пакетов, до тех пор пока эти пакеты не пустые. Закрытие связи.
(nil let ((socketname (nil const "Мой Сокет"))
(lockcout ('lock newobject)))
(nil let ((unlink-error (socketname unlink)))
(nil if unlink-error
(cout writeln "unlink(" socketname ")=" unlink-error)
(cout writeln "unlink(" socketname ")=OK"))) ; let unlink-error
(nil fork
(nil try
; Клиент
(nil let ((sc ('socket newobject)) o s c)
(sc open "UNIX" "STREAM")
(lockcout progn (cout writeln "Клиент: open = " o))
(nil let (ce)
(nil do-while
(lockcout progn (cout writeln "Клиент: connect..."))
(nil setq ce (sc connect socketname))
(nil if ce
(nil progn
(lockcout progn (cout writeln "Клиент connect: " ce))
(1 sleep))
(lockcout progn (cout writeln "Клиент connect: OK")))
ce) ; do-while
) ; let ce
(lockcout progn (cout writeln "Клиент посылает сообщение серверу: Привет!"))
('s set (sc write "Привет!"))
(lockcout progn (cout writeln "Клиент послал " s " байт"))
(nil let ((buf ('byte-vector newobject 100)) r)
('r set (sc read buf))
(lockcout progn (cout writeln "Клиент получил сообщение размером " r))) ; let buf
('c set (sc close))
(lockcout progn (cout writeln "Клиент закрыл связь с сервером : " c))) ; let sc клиент
nil
(nil progn
(cerr writeln "Клиент:EvalHistory[")
((nil exception-history) for* history-i
(cerr print history-i))
((cerr writeln "]")
write "Error: ")
(nil let ((exv (nil exception)))
(nil if (nil consp exv)
(nil apply cerr 'writeln exv)
(cerr writeln exv)))
nil)
) ; try
) ; fork
; Сервер
(nil let ((sc ('socket newobject)) l b o a s u c c2)
('o set (sc open "UNIX" "STREAM"))
(lockcout progn (cout writeln "Сервер: open = " o))
(sc bind socketname)
(lockcout progn (cout writeln "Сервер: bind = " b))
(lockcout progn (cout writeln "Сервер: socket-max-connections = " socket-max-connections))
('l set (sc listen socket-max-connections))
(lockcout progn (cout writeln "Сервер: listen = " l))
('a set (sc accept))
(lockcout progn (cout writeln "Сервер: accept = " a))
(nil let ((buf ('byte-vector newobject 100)) r)
('r set (a read buf))
(lockcout progn (cout writeln "Сервер получил сообщение размером " r))) ; let buf
(lockcout progn (cout writeln "Сервер посылает сообщение клиенту: Пока!"))
('s set (a write "Пока!"))
(lockcout progn (cout writeln "Сервер послал " s " байт"))
('c2 set (a close))
(lockcout progn (cout writeln "Сервер закрыл связь с клиентом : " c2))
('c set (sc close))
(cout writeln "Сервер закрылся : " c)
('u set (socketname unlink))
(cout writeln "Сервер удалил файл : " u)) ; let sc сервер
) ; let socketname
unlink(Мой Сокет)=NOENT Клиент: open = nil Клиент: connect... Сервер: open = nil Сервер: bind = nil Клиент connect: CONNREFUSED Сервер: socket-max-connections = 128 Сервер: listen = nil Клиент: connect... Сервер: accept = Socket(5) Клиент connect: OK Клиент посылает сообщение серверу: Привет! Клиент послал 13 байт Сервер получил сообщение размером 13 Сервер посылает сообщение клиенту: Пока! Сервер послал 9 байт Клиент получил сообщение размером 9 Сервер закрыл связь с клиентом : nil Клиент закрыл связь с сервером : nil Сервер закрылся : nil Сервер удалил файл : nil