我用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 .........')
为什么会出现问题,以及如何纠正?
提前致谢。
答案 0 :(得分:1)
你设置了5毫秒的超时,这是荒谬的短暂,所以读取超时。你可能意味着5秒,这是一个5000的参数值。