我现在有一个脚本,它使用asyncio
监听TCP端口上的任何传入连接,如果接收到连接,它将解析数据并为接收到的数据设置一个类变量。在
这对于等待传入的连接来说是完美的,但是我无法想出如何在等待传入连接的同时运行一个循环。我正在构建一个通过TCP接收输入的服务器,并在main()函数的循环中更新缓存中存储的内容。在
这是我目前所拥有的:
import socket
import binascii
import struct
import asyncio
TCP_IP = '127.0.0.1'
TCP_PORT = 30194
BUFFER_SIZE = 1024
loop = asyncio.get_event_loop()
coro = asyncio.start_server(incomingData, TCP_IP, TCP_PORT)
server = loop.run_until_complete(coro)
try:
loop.run_forever()
except KeyboardInterrupt:
pass
# Async method to handle incoming connections
async def incomingData(reader, writer):
data = await reader.read(BUFFER_SIZE)
incomingMessage = data.decode()
addr = writer.get_extra_info('peername')
print("Received %r from %r" % (incomingMessage, addr))
# [0] login packet
if ord(incomingMessage[0]) == 0:
username = ""
password = ""
try:
usernameLength = ord(incomingMessage[1]) + 2 # plus two for the 2 chars taken up by the hex
passwordLength = ord(incomingMessage[usernameLength]) + 1 + usernameLength
for x in range(2,usernameLength):
username += incomingMessage[x]
for i in range(usernameLength,passwordLength):
password += incomingMessage[i]
loginHandler.username = username
loginHandler.password = password
except:
print("Unexpected error")
writer.write(data)
await writer.drain()
writer.close()
但是,如果我添加一个循环来包含loop.run_forever()
,那么它只输出一次打印线,再也不会输出(我希望它在一个循环中打印几百次)-例如:
将在执行中只打印一次-如何使逻辑循环与异步TCPstart_server
循环并行运行?在
你可以试试多线程。在
所以你要为你要做的两件事创建一个线程。在
你可以看看这个https://www.tutorialspoint.com/python/python_multithreading.htm
这是我的第一个答案。在
相关问题 更多 >
编程相关推荐