You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:45:29