SWI-Prolog中的socket是否有大错误?

时间:2015-03-21 23:33:29

标签: sockets stream swi-prolog

我用Python写了一个服务器,用SWI-Prolog写了一个客户端。 客户端可以向服务器发送消息,但无法接收 从服务器发送的消息。

两个节目的来源如下。

1). The server 

导入套接字

如果" 主要" == 名称

try:

    sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    sock.bind(('localhost',8888))
    sock.listen(5)
except:
    print("init socket err!")

while True:
    print('\n listren for client...')
    conn,addr = sock.accept()
    print('get client')
    print(addr)

    conn.settimeout(5)
    szBuf = conn.recv(1024)
    print(byt)

    if '0' == szBuf:
        conn.send(b'exit')
    else:
        conn.send(b'welcome client!')

    conn.close()
    print('end of the service')

2). The client 

:- use_module(library(socket)).

create_client :-
    setup_call_catcher_cleanup(
        tcp_socket(Socket),
        tcp_connect(Socket, localhost:8888),
        exception(_),
        tcp_close_socket(Socket)
    ),
    setup_call_cleanup(
        tcp_open_socket(Socket, In, Out),
        chat_to_server(In, Out),
        close_connection(In, Out)
    ).

close_connection(In, Out) :-
    close(In, [force(true)]),
    close(Out, [force(true)]).

chat_to_server(In, Out) :-
    write(Out,'....... 12345 .........'),
    read(In,Term),
    nl,write(Term),nl.

当客户端运行时,服务器很快退出并显示错误:

Traceback (most recent call last):
      File "D:\PyQt4\learn\sockets\server2.py", line 24, in <module>
      szBuf = conn.recv(1024)
socket.timeout: timed out

服务器然后停止直到重新启动服务器。

但如果删除谓词,请阅读(In,Term), 客户端和服务器都将正常运行。

新条款如下:

chat_to_server(In, Out) :-
    write(Out,'....... 12345 .........')

为什么会出现问题,以及如何纠正?

提前致谢。

1 个答案:

答案 0 :(得分:1)

你设置了5毫秒的超时,这是荒谬的短暂,所以读取超时。你可能意味着5秒,这是一个5000的参数值。