gpt4 book ai didi

python-3.x - 是否可以同时在同一IP和端口上接收数据

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

我试图做到这一点,以便在客户端服务器程序的任何时候,如果客户端希望退出程序,则无论时间如何,服务器都会发送数据,服务器将能够接收该数据。

为此,我尝试使用线程在后台运行一个线程,以在后台监听数据“退出”
虽然在我的代码的非线程部分中,它只是简单地将数据视为正常

这是我的尝试,(当然)没有用

客户:

import socket

host = str(socket.gethostbyname(socket.gethostname())) # Gets local IP so I don't have to keep changing
# host = "192.168.0.17"
port = 1000
ID = "__UserLogin123__"
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
while True:
x = input("Send QUIT? -> ").upper()
if x == "Y":
s.send(str.encode("QUIT"))
else:
s.send(str.encode("foo"))

服务器:
import socket
import queue
from threading import Thread

def foo(conn):
while True:
x = conn.recv(2048).decode()
if x == "QUIT":
return True
if x == "foo":
print("hollo")


result = False
port = 1000
host = str(socket.gethostbyname(socket.gethostname()))
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind((host, port))
s.listen(1)
conn, addr = s.accept()
que = queue.Queue()
connThread = Thread(target=lambda q, arg1: q.put(foo(arg1)), args=(que,conn))
connThread.start()

while not result:
print("Waiting")
test = conn.recv(2048).decode()
if test == "foo":
print("hi")
result = que.get()

最佳答案

通常,这不是通过多个线程来解决,而是通过更多的层来解决。您只需创建一个附加层,该层将仅检查退出词。如果处理中的单词没有退出,则将单词传递到上层(您的应用程序逻辑)。如果是,则不要传递任何内容,只需退出程序即可。

关于python-3.x - 是否可以同时在同一IP和端口上接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53253537/

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