1

我对sockets很困惑……我有两个脚本,一个是server.py,第二个是client.py:

服务器.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'

客户端.py

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('ip', 1235))

为什么 server.py 脚本不显示超时错误?

4

2 回答 2

3

如果你想拥有一个,你需要为套接字设置超时:

...
client, address = server.accept()
client.settimeout(10)
...

或者,您可以对所有套接字使用默认超时

socket.Timeouterror不存在,应该存在socket.timeout

此外,您可能应该关闭客户端套接字,否则客户端将不知道连接已关闭。仅超时并不能为您做到这一点。

于 2013-09-08T15:24:13.600 回答
2

默认情况下,一些套接字调用是阻塞的。如果什么都没发生,他们将无限期地封锁。recv() 是这些调用之一。其他阻塞调用是accept()、recvfrom()、read()。

于 2013-09-08T15:49:54.060 回答