Python 套接字中没有超时异常
我对插座很困惑。。。我有两个脚本,一个是server.py,另一个是client.py: server.pyPython 套接字中没有超时异常,python,sockets,Python,Sockets,我对插座很困惑。。。我有两个脚本,一个是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: clie
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'
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('ip', 1235))
client.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'
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('ip', 1235))
为什么server.py脚本没有显示超时错误?如果您希望有一个套接字,则需要为该套接字设置:
...
client, address = server.accept()
client.settimeout(10)
...
或者,您可以对所有套接字使用
socket.Timeouterror
不存在,它应该是socket.timeout
另外,您可能应该关闭客户端套接字,否则客户端将不知道连接已关闭。仅超时并不能满足您的需要。如果您想拥有一个套接字,则需要为其设置一个:
...
client, address = server.accept()
client.settimeout(10)
...
或者,您可以对所有套接字使用
socket.Timeouterror
不存在,它应该是socket.timeout
另外,您可能应该关闭客户端套接字,否则客户端将不知道连接已关闭。超时本身并不能做到这一点。默认情况下,某些套接字调用被阻塞。如果什么也没发生,他们就会无限期地封锁。recv()就是这些调用之一。其他阻塞调用有accept()、recvfrom()、read()。默认情况下,一些套接字调用正在阻塞。如果什么也没发生,他们就会无限期地封锁。recv()就是这些调用之一。其他阻塞调用有accept()、recvfrom()、read()。我现在设置了超时,但得到了相同的结果。我现在设置了超时,但得到了相同的结果。它不阻塞程序,程序执行并结束。我想知道为什么会这样?谢谢你的留言。client.py关闭套接字,因为进程在连接完成后退出。当client.py关闭套接字(TCP连接)时,recv()调用将在另一端返回,返回值为0。因此,如果要执行“x=client.recv(1024)”,那么x的值将是0,这就是服务器程序也返回的原因。你的程序应该检查一下。检查返回值0是TCP接收器的关键。它不会阻止程序,程序执行并结束。我想知道为什么会这样?谢谢你的留言。client.py关闭套接字,因为进程在连接完成后退出。当client.py关闭套接字(TCP连接)时,recv()调用将在另一端返回,返回值为0。因此,如果要执行“x=client.recv(1024)”,那么x的值将是0,这就是服务器程序也返回的原因。你的程序应该检查一下。检查返回值0是TCP接收器的关键。