我对套接字非常困惑...我有两个脚本,一个是server.py,第二个是client.py:
server.py
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('0.0.0.0', 1235))
server.listen(1)
while True:
client, address = server.accept()
try:
client.recv(1024)
except socket.Timeouterror:
print 'timeout'
client.py
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('ip', 1235))
为什么server.py脚本没有显示超时错误?
答案 0 :(得分:3)
如果你想拥有一个套接字,你需要set the timeout:
...
client, address = server.accept()
client.settimeout(10)
...
或者您可以为所有套接字使用default timeout。
socket.Timeouterror
不存在,应为socket.timeout
。
此外,您可能应该关闭客户端套接字,否则客户端将不知道连接已关闭。单独的超时不适合你。
答案 1 :(得分:2)
默认情况下,某些套接字调用是阻塞的。如果没有任何反应,它们将无限期地阻止。 recv()就是其中一个调用。其他阻塞调用是accept(),recvfrom(),read()。