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