我的目标是每隔几秒检查一次tcp端口,并验证数据是否进入。如果数据进入,则将“OK”消息发送到另一个端口。如果没有消息“失败”将被发送到该端口。试图使用该功能recv()
。这个函数的问题是,它等到服务器发送的所有数据都完成为止。数据的大小从第二个变化到另一个。当数据不可用时,这将导致非常大的延迟。此外如果服务器已停止流式传输数据,则只会在此情况下发送“失败”消息,但如果流式传输为空数据,则不会发送此消息。如何解决这些问题?
我的代码:
import socket
import time
s= socket.socket()
host = '127.0.0.1'
port = 24039
s.connect((host, port))
import socket
TCP_IP = "127.0.0.1"
TCP_PORT = 24040
sock = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
sock.bind((TCP_IP, TCP_PORT))
sock.listen(1)
clients = []
conn, addr = sock.accept()
clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect((TCP_IP, TCP_PORT))
while True:
data = s.recv(30)
if not data:
conn.send(bytes("Failed", "utf-8"))
print ("Failed:")
time.sleep(2)
else:
conn.send(bytes("OK", "utf-8"))
print ("OK")
time.sleep(2)
发布于 2018-06-01 20:35:44
可以使用SELECT
import select
......
inputs = [ socket1 ]
outputs = [ ]
while not shutdown:
readable, writable, exceptional = select.select(inputs, outputs, inputs)
for sk in readable:
if sk is socket1:
# recv ... and further processing
https://stackoverflow.com/questions/-100004714
复制相似问题