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

引言


  经过前面几篇的介绍,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 服务的流程图比较简单,如下:

Dicom 学习笔记-DICOM C-Echo 消息服务_第1张图片
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 IP:C-Echo 服务端的 IP 地址或机器名;
  • C-Echo SCP Port:C-Echo 服务端的端口;
  • C-Echo SCU AE Title:C-Echo 客户端应用实体的名称;
  • C-Echo SCP AE Title:C-Echo 服务端应用实体的名称;

C-Echo SCP


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

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

C-Echo 过程分析


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

Dicom 学习笔记-DICOM C-Echo 消息服务_第2张图片
C-Echo Packet
  • 最上面红色框内的三行是建立 TCP 连接(三次握手)的过程;
  • 接着蓝色框内的两行是两个 AE 建立 Association 连接的过程;
  • 中间黄色框内的两行是两个 AE 之间 C-Echo 请求和响应的过程;
  • 最后面的蓝色框内的两行是两个 AE 通过 A-RELEASE 请求交互释放 Association 连接的过程;

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

Dicom 学习笔记-DICOM C-Echo 消息服务_第3张图片
C-Echo Response

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

你可能感兴趣的:(Dicom 学习笔记-DICOM C-Echo 消息服务)