首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以同时在同一IP和端口上接收数据

问是否可以同时在同一IP和端口上接收数据
EN

Stack Overflow用户
提问于 2018-11-12 05:42:45
回答 1查看 31关注 0票数 1

我试图让它在我的客户端-服务器程序中的任何点上,如果客户端希望退出程序,它将发送服务器能够接收的数据,而不管时间是什么。

为了做到这一点,我尝试使用线程在后台运行一个线程,在后台“退出”侦听数据,而在我的代码的非线程部分,它只是将数据当作正常处理

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

客户端:

代码语言:javascript
复制
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"))

服务器:

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2018-11-12 05:49:30

这通常不是由多个线程解决的,而是由更多的层解决的。您只需创建一个附加层,它将只检查quit word。如果处理字未退出,则将字传递给上层(您的应用程序逻辑)。如果是,那么不要放弃任何东西,直接退出程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53253537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档