有关如何使用yap的socket_select / 5的任何示例?

时间:2017-05-02 15:23:19

标签: sockets prolog swi-prolog yap

我试图编写一个prolog服务器,以便能够从用另一种编程语言(Python,JavaScript,等等......)编写的客户端查询prolog中编写的知识库,就像SQL数据库一样。

我原本以为这是很常见的事情,但我无法在网上找到任何例子。

所有必需的套接字函数似乎都列在https://www.dcc.fc.up.pt/~vsc/Yap/documentation.html#Sockets,而我使用yap而不是swi-prolog的原因是我想使用Unix套接字,而不是TCP / IP套接字。但我会在这里使用AF_INET,因为swi-prolog不支持AF_UNIX。

编写从客户端写入字符串的服务器很简单:

#!/usr/bin/yap -L --

:- initialization(main).

main :-
    socket('AF_INET', Socket),
    socket_bind(Socket, 'AF_INET'('localhost', 1234)),
    socket_listen(Socket, 2),
    socket_accept(Socket, _Client, Stream),
    read(Stream, Term),
    write(Term),
    socket_close(Socket).

我使用的简单Python 3客户端如下所示:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 1234))
sock.send(b"'Hello World\n'")
sock.close()

让它变得棘手的是让服务器将字符串回送给客户端,据我所知,这需要socket_select / 5。但我不知道如何使用它可用的文档。

0 个答案:

没有答案