我是OSC通信的初学者。
我以前用UDP实现过通信,但OSC是第一次。
我已经看过了。
OSC根据该文档将某些信息发送到某些URL,如“/filter”。
OSC_客户端.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_服务器.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客户端.py和UDP服务器.py。
UDP客户端.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服务器.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通信的软件内容,了解发送的是什么数据,为此,我想知道是否可以做到。
1条答案
按热度按时间jdgnovmf1#
知道这是一个老问题,但我偶然发现它寻找帮助。如果我理解你想做什么正确的,你只是想看到所有的OSC消息,而不是必须指定一个路径。
如果是这样的话,好消息是这很容易。
在您的OSC_Server.py示例中,更改以下内容:
对此:
这将使用内置的“print()”函数来打印出所有通过OSC在你指定的端口上传入的消息。有点惊讶的是文档没有显示这一点,并在示例中解释得更好一点。
我希望这能帮到一些人