首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在新消息到达时中断while循环?

如何在新消息到达时中断while循环?
EN

Stack Overflow用户
提问于 2021-04-08 22:34:36
回答 1查看 161关注 0票数 0

我在ESP as a serverLaptop as a client中使用过Python socket。我从this site定制了套接字代码。当我将loop作为客户端输入发送时,我在服务器上进入了一个循环。我不知道当我发送一个单词而不是loop时,while loop是如何中断的,例如"Hello“。

server.py:

代码语言:javascript
复制
import socket

host = ''
port = 5560

def setupServer():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print("Socket created.")
    try:
        s.bind((host, port))
    except socket.error as msg:
        print(msg)
    print("Socket bind comlete.")
    return s

def setupConnection():
    s.listen(1)
    conn, address = s.accept()
    print("Connected to: " + address[0] + ":" + str(address[1]))
    return conn

def Hello_():
    print('Hello')

def Loop_():
    while True:
        print('yes')
        
def dataTransfer(conn):
    while True:
        data = conn.recv(1024) 
        data = data.decode('utf-8')
        dataMessage = data.split(' ', 1)
        command = dataMessage[0]

        if command == 'loop':
            Loop_()
        if command == 'Hello':
            Hello_()         
        else:
            print("X")

    conn.close()

s = setupServer()

while True:
    try:
        conn = setupConnection()
        dataTransfer(conn)
    except:
        break

client.py

代码语言:javascript
复制
import socket

host = '192.168.56.1'
port = 5560

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))

while True:
    command = input("Enter your command: ")
    s.send(str.encode(command))
    
s.close()

我知道你的时间很宝贵,感谢你花时间帮助我。

EN

Stack Overflow用户

回答已采纳

发布于 2021-04-08 23:00:54

如果希望在套接字上接收到更多数据时返回Loop_()方法,可以修改该方法,使其调用select()来轮询套接字,查看是否有更多数据到达,如下所示。(请注意,我已经向Loop_()方法添加了一个conn参数,这样我就可以传入套接字来检查它)

代码语言:javascript
复制
import select

[...]

def Loop_(conn):
    while True:
        print('yes')
        inReady, outReady, exReady = select.select([conn], [], [], 0.0)
        if (conn in inReady):
           print('more data has arrived at the TCP socket, returning from Loop_()')
           break

def dataTransfer(conn):
    while True:
        data = conn.recv(1024)
        data = data.decode('utf-8')
        dataMessage = data.split(' ', 1)
        command = dataMessage[0]

        if command == 'loop':
            Loop_(conn)
        if command == 'Hello':
            Hello_()
        else:
            print("X")

    conn.close()
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67006225

复制
相关文章

相似问题

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