如何在套接字 Python 中为 recvfrom 设置超时
How to set a timeout for recvfrom in socket Python
我这里有一个简洁的小程序,它只连接到服务器。它是一个 UDP 客户端。它应该向服务器发送消息并等待响应。
import socket
host = socket.gethostname() # Change to the ip address
port = 4000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = input('Send_To_Server: ')
while message != 'endhost':
s.sendto(message.encode('utf-8'), (host, port))
data, addr = s.recvfrom(1024)
data = data.decode('utf-8')
print("Received from server: " + data)
message = input('Send_To_Server: ')
s.close()
唯一的问题是,如果服务器没有启动,它就只是坐在那里。有没有办法设置超时,以便在这么多秒后通过命令?
使用settimeout
函数:
import socket
host = socket.gethostname() # Change to the ip address
port = 4000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(10)
message = input('Send_To_Server: ')
while message != 'endhost':
s.sendto(message.encode('utf-8'), (host, port))
data, addr = s.recvfrom(1024)
data = data.decode('utf-8')
print("Received from server: " + data)
message = input('Send_To_Server: ')
s.close()
这将设置 10 秒超时。
我这里有一个简洁的小程序,它只连接到服务器。它是一个 UDP 客户端。它应该向服务器发送消息并等待响应。
import socket
host = socket.gethostname() # Change to the ip address
port = 4000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = input('Send_To_Server: ')
while message != 'endhost':
s.sendto(message.encode('utf-8'), (host, port))
data, addr = s.recvfrom(1024)
data = data.decode('utf-8')
print("Received from server: " + data)
message = input('Send_To_Server: ')
s.close()
唯一的问题是,如果服务器没有启动,它就只是坐在那里。有没有办法设置超时,以便在这么多秒后通过命令?
使用settimeout
函数:
import socket
host = socket.gethostname() # Change to the ip address
port = 4000
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.settimeout(10)
message = input('Send_To_Server: ')
while message != 'endhost':
s.sendto(message.encode('utf-8'), (host, port))
data, addr = s.recvfrom(1024)
data = data.decode('utf-8')
print("Received from server: " + data)
message = input('Send_To_Server: ')
s.close()
这将设置 10 秒超时。