python - 有没有办法打印 OSC 收到的所有信息?
问题描述
我是 OSC 通信的初学者。
我过去使用UDP实现了通信,但OSC是第一次。
我已阅读Python OSC 库文档。
根据该文档,OSC 将某些信息发送到某些 URL,例如“/filter”。
OSC_Client.py
import argparse
import random
import time
from pythonosc import udp_client
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip", default="127.0.0.1",
help="The ip of the OSC server")
parser.add_argument("--port", type=int, default=5005,
help="The port the OSC server is listening on")
args = parser.parse_args()
client = udp_client.SimpleUDPClient(args.ip, args.port)
for x in range(10):
client.send_message("/filter", random.random())
time.sleep(1)
接收端的代码还通过指定特定的 URL(如“/filter”)来接收信息。
OSC_Server.py
import argparse
import math
from pythonosc import dispatcher
from pythonosc import osc_server
def print_volume_handler(unused_addr, args, volume):
print("[{0}] ~ {1}".format(args[0], volume))
def print_compute_handler(unused_addr, args, volume):
try:
print("[{0}] ~ {1}".format(args[0], args[1](volume)))
except ValueError: pass
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--ip",
default="127.0.0.1", help="The ip to listen on")
parser.add_argument("--port",
type=int, default=5005, help="The port to listen on")
args = parser.parse_args()
dispatcher = dispatcher.Dispatcher()
dispatcher.map("/filter", print)
dispatcher.map("/volume", print_volume_handler, "Volume")
dispatcher.map("/logvolume", print_compute_handler, "Log volume", math.log)
server = osc_server.ThreadingOSCUDPServer(
(args.ip, args.port), dispatcher)
print("Serving on {}".format(server.server_address))
server.serve_forever()
但是,普通UDP的代码是:可以不指定URL等发送字符串,指定端口接收全部字符串信息。
像下面的 UDP_Client.py 和 UDP_Server.py。
UDP_Client.py
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
ADDRESS = "127.0.0.1"
s = socket(AF_INET, SOCK_DGRAM)
while True:
msg = "testSend"
s.sendto(msg.encode(), (ADDRESS, PORT))
s.close()
UDP_Server.py
from socket import socket, AF_INET, SOCK_DGRAM
HOST = ''
PORT = 5000
s = socket(AF_INET, SOCK_DGRAM)
s.bind((HOST, PORT))
while True:
msg, address = s.recvfrom(8192)
print(f"message: {msg}\nfrom: {address}")
s.close()
我想知道是否有一种方法可以通过仅指定端口号来获取 OSC 中所有接收到的数据。
我想分析与 OSC 通信的软件的内容,并知道正在发送什么样的数据。为此,我想知道这是否可以做到。
解决方案
推荐阅读
- javascript - onmouseenter 和 onmouseleave 事件像地狱一样闪烁
- android - 在 VideoView 中找不到视频文件 URL
- openid-connect - 如何使用单页应用程序和 openid 连接隐式流撤销访问令牌?
- javascript - 偏移文档内锚链接的固定位置标题
- python-3.x - 为什么即使输入数组的形状和长度相同,也会出现弃用警告和 ValueError?
- arrays - 在数组中找到重复项并打印它们
- typescript - 如何在 v-model 中为基于类的组件使用 getter 和 setter?
- amazon-web-services - 无法安装 aws-cli
- sql - 比较单行上按行分组
- java - 如何在 NDK 中计算 C 中的输入 int 数组