gpt4 book ai didi

python - 在python中没有收到带有套接字超时的任何数据后如何执行代码

转载 作者:行者123 更新时间:2023-12-03 12:02:12 25 4
gpt4 key购买 nike

我正在使用TCP套接字发送和接收数据。我的逻辑是,如果我的服务器接收到数据(例如0值),那么结果就很好。但是,如果我在为套接字设置了10秒的超时设置后没有收到任何数据,那么我希望我的值成为默认值1。我尝试使用的服务器代码如下:

import socket
TCP_IP = "0.0.0.0"
TCP_PORT = 5004

BUFFER_SIZE = 20 # Normally 1024, but we want fast response

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.settimeout(10)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)

conn, addr = s.accept()

while 1:
data = conn.recv(BUFFER_SIZE)
if not data:
break
datalist = list(data)
print("payload: %s" % datalist)
conn.send(data) # echo
else:
datalist = 1
print("default value: %s" % datalist)
但是10秒钟后,我收到超时错误,无法设置默认的数据列表值1。
请指教。目的是,如果它不接收任何数据,则将其值设置为1
错误:
Traceback (most recent call last):
File "/home/code.py", line 15, in <module>
conn, addr = s.accept()
File "/usr/lib/python3.8/socket.py", line 292, in accept
fd, addr = self._accept()
socket.timeout: timed out

最佳答案

我认为您想为客户端设置超时时间,因此,如果客户端在十秒内发送消息,则该客户端应保持连接状态,否则将断开连接。情况是这样的:
这是server.py代码:

import socket
TCP_IP = "127.0.0.1"
TCP_PORT = 5004
BUFFER_SIZE = 20 # Normally 1024, but we want fast response
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
conn.settimeout(10)
data = conn.recv(BUFFER_SIZE)
if data:
conn.settimeout(None)
conn.send(b"welcome")
print("client is active")
try:
while True:
data = conn.recv(BUFFER_SIZE)
if data:
print("here is the message:",data)
else:
conn.close()
break
except Exception as e:
print("error is",e)
else:
print("client is inactive")
这是您的 client.py代码:
import socket
TCP_IP = "127.0.0.1"
TCP_PORT = 5004
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((TCP_IP, TCP_PORT))
x = input("write anything if you want to connect >")
s.send(bytes(x,'utf-8'))
data = s.recv(1024)
print(data)
try:
while True:
x = input("write your message >")
s.send(bytes(x,'utf-8'))
except Exception as e:
print("error is",e)

关于python - 在python中没有收到带有套接字超时的任何数据后如何执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64494088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com