Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 套接字中没有超时异常_Python_Sockets - Fatal编程技术网

Python 套接字中没有超时异常

Python 套接字中没有超时异常,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

我对插座很困惑。。。我有两个脚本,一个是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'
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接收器的关键。