基本Python套接字通信问题;使用

2024-06-28 20:15:27 发布

您现在位置:Python中文网/ 问答频道 /正文

首先让我说我不是一个程序员,但我总是能够用Python完成我所需要的。我目前的项目是SageTV的网络编码器。SageTV PVR将命令发送到在端口4510上运行的网络编码器,该网络编码器反过来调谐捕获卡,然后根据传递的参数开始ffmpeg录制。然后它继续侦听进一步的指令并处理这些命令。你知道吗

我已经设置了SageTV,可以使用netcat进行通信。这是使用netcat的输出:

root@debian# nc -l -k -p 4510
VERSION
1
STOP
OK

在上面的例子中。SageTV服务器回答“VERSION”,我键入“1”,然后它回答“STOP”,我回答“OK”。你知道吗

我一直在试图找到一个很好的例子,说明如何将netcat正在做的事情转换成Python脚本。我已经找到了各种各样的例子,但我只是找不到一个将听,甚至只是显示服务器正在显示什么。有人能给我看一个好的例子吗?我知道这应该是很容易做到的,但我一直在撞我的头在这个没有运气。任何帮助都将不胜感激。你知道吗


Tags: 项目端口命令网络服务器参数versionok
1条回答
网友
1楼 · 发布于 2024-06-28 20:15:27

使用python3和asyncio的Examle代码:

import asyncio

@asyncio.coroutine
def handler(reader, writer):
    def send(msg):
        print("send to device: {}".format(msg))
        writer.write((msg + '\n').encode())

    print("device connected")
    while True:
        msg = yield from reader.readline()
        if not msg:
            print("device disconnected")
            break
        msg = msg.decode().strip()
        print("got from device: {}".format(msg))

        if msg == 'VERSION':
            send('1')
        elif msg == 'STOP':
            send('OK')

loop = asyncio.get_event_loop()
coro = asyncio.start_server(handler, '0.0.0.0', 4510, loop=loop)
server = loop.run_until_complete(coro)
try:
    loop.run_forever()
except KeyboardInterrupt:
    pass
server.close()
loop.run_until_complete(server.wait_closed())
loop.close()

文档从https://docs.python.org/3/library/asyncio.html开始

相关问题 更多 >