繁体   English   中英

基本的Python套接字通信问题; 与netcat合作

[英]Basic Python socket communications questions; working with netcat

首先让我说我不是程序员,但是我始终能够完成Python所需的工作。 我当前的项目是SageTV的网络编码器。 SageTV PVR将命令发送到在端口4510上运行的网络编码器,该网络编码器依次调整捕获卡,然后根据传递的参数开始ffmpeg录制。 然后,它继续侦听其他指令并处理这些命令。

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

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

在上面的例子中。 SageTV服务器回答“版本”,然后键入“ 1”,然后回答“停止”,然后回答“确定”。

我一直在尝试寻找一个很好的例子,说明如何将netcat所做的事情转换为Python脚本。 我找到了各种示例,但是我找不到一个可以监听甚至只是显示服务器显示内容的示例。 有人可以向我展示或指出一个好榜样吗? 我知道这确实很容易做到,但是我一直对此之以鼻。 任何帮助将不胜感激。

使用python3和asyncio的检查代码:

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开始

暂无
暂无

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

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