繁体   English   中英

使用Python的无阻塞套接字通信

[英]Non-blocking socket communications with Python

我正在编写一个通过套接字进行通信的小型Python代码,但是我很难使它发送和接收是绝对独立的操作,即不必等待响应即可发送另一条消息。 我当前的代码如下:

#!/usr/bin/python3
import argparse
import json
import socket
import time
import readline

parser = argparse.ArgumentParser(description='Client')
parser.add_argument("address", metavar= "Address", type=str,nargs=1, help="Server IP")
parser.add_argument("port",metavar="Port", type=str, nargs=1, help="Port to use")
args = parser.parse_args()
addr = args.address[0]
port = int(args.port[0])
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print("Connecting to {0} on port {1}".format(addr, port))
try:
    sock.connect((addr, port))
    print("Successfully connected to {0}".format(addr))
except Exception as e:
    raise(e)


sock.settimeout(60)
while True:
    msg = input("{0} | Out: ".format(time.strftime("%H:%M:%S")))
    words = msg.split(" ")
    if(words[0] == "connmobi"):
        words = "connect MOBIPIN-02000152 D4:F5:13:6B:77:A6".split(" ")
    data = json.dumps({"command":words[0],"args": [word for word in words[1:]]})
    sock.send("{0}\n".format(data).encode())
    try:
        data = sock.recv(1024).decode().strip('\n')
    except socket.timeout:
        continue

    print("{0} | In: {1}".format(time.strftime("%H:%M:%S"), data))
    if data == "bye":
        sock.close()
        print("Socket closed")
        break

如何“分离”套接字的接收和读取操作?

这绝不是一个简单的解决方案,但是您可以看看python asyncio。 https://docs.python.org/3/library/asyncio-protocol.html

这些模块专门用于套接字的异步处理。 快速搜索后,我发现了一个可能对您有所帮助的示例。 https://gist.github.com/dbehnke/c8f64cb6e67afff437c1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM