如何在pynetdicom的on_association_requested等方法中获取消息类型
解决pynetdicom中获取DIMSE消息类型的问题
首先要明确:on_association_requested和on_association_released是关联层面的事件处理器,分别在客户端发起关联请求、关联释放时触发,它们本身并不处理具体的DIMSE消息(比如C-ECHO、C-STORE),所以在这两个方法里自然拿不到DIMSE消息类型。
要获取DIMSE消息类型,需要用对应消息类型的专用事件处理器,或者统一的DIMSE消息接收事件:
1. 使用对应消息类型的专用处理器
pynetdicom为每种DIMSE消息都提供了专属的事件方法,比如:
- 处理C-ECHO请求:
on_c_echo_requested - 处理C-STORE请求:
on_c_store_requested - 处理C-FIND请求:
on_c_find_requested
以C-ECHO为例,代码示例:
from pynetdicom import AE from pynetdicom.sop_class import VerificationSOPClass ae = AE() ae.add_supported_context(VerificationSOPClass) def on_c_echo_requested(event): # 通过event.request.CommandField.name获取消息类型 print(f"收到的DIMSE消息类型: {event.request.CommandField.name}") return 0x0000 # 返回成功状态码 # 绑定事件处理器 ae.on_c_echo_requested = on_c_echo_requested # 启动服务 ae.start_server(("0.0.0.0", 11112))
2. 使用统一的DIMSE消息接收事件
如果需要一次性处理多种DIMSE消息,可以用on_dimse_received事件,它会捕获所有收到的DIMSE消息:
def on_dimse_received(event): # 获取消息类型 msg_type = event.message.CommandField.name print(f"收到DIMSE消息类型: {msg_type}") # 根据消息类型分支处理 if msg_type == "C-ECHO RQ": # 处理C-ECHO请求逻辑 pass elif msg_type == "C-STORE RQ": # 处理C-STORE请求逻辑 pass ae.on_dimse_received = on_dimse_received
内容的提问来源于stack exchange,提问作者Siddalingesh Angadi
相关产品推荐
相关产品推荐

