Dicom 学习笔记-DICOM C-Echo 消息服务

2018-11-07  本文已影响0人  Statmoon

引言


  经过前面几篇的介绍,DIMSE-C 消息服务这块已经讲解了差不多了,还剩最后一个 C-Echo 消息服务,这个服务相对前面的4个服务来说更简单一些,本文结合开源 DICOM 库 fo-dicom 详细介绍一下 C-Echo 服务。

C-Echo 消息服务


  首先来看一下 DICOM 标准中的描述:

The C-ECHO service is invoked by a DIMSE-service-user to verify end-to-end communications with a peer DIMSE-service-user. It is a confirmed service.

  C-Echo 服务就是用来验证两个同等的 DIMSE-service-user 之间端到端的通信是否成功。在实际场景中,用来验证两个 PACS 系统之间或设备和 PACS 系统之间的通信是否成功。
  C-Echo 服务的流程图比较简单,如下:

C-Echo Flowchart

C-Echo SCU


  借助开源 DICOM 库 fo-dicom 封装的 DicomCEchoRequest.cs,实现 C-Echo SCU 的代码如下:

using Dicom.Network;
using System;
static void Main(string[] args)
{
    var client = new DicomClient();
    client.NegotiateAsyncOps();

    var request = new DicomCEchoRequest();
    request.OnResponseReceived += (DicomCEchoRequest req, DicomCEchoResponse response) =>
    {
        Console.WriteLine("C-Echo Status: " + response.Status);
    };
    client.AddRequest(request);

    client.Send({C-Echo SCP IP}, {C-Echo SCP Port}, false, {C-Echo SCU AE Title}, {C-Echo SCP AE Title});

    Console.ReadLine();
}

C-Echo SCP


  实现 C-Echo SCP 的代码参考如下:

using Dicom.Network;
using System;
static void Main(string[] args)
{
    var server = DicomServer.Create<DicomCEchoProvider>(104);
    Console.ReadLine();
}

C-Echo 过程分析


  C-Echo 的交互过程比较简单,完整的数据包详见下图:

C-Echo Packet

  下图是 C-Echo Response 数据包的详细内容,可以看到里面包含 C-Echo 请求的结果,Success 说明两边的通信是正常的。

C-Echo Response

以上就是针对 C-Echo 消息服务数据包的完整分析。

上一篇 下一篇

猜你喜欢

热点阅读