【转】05.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 服务的流程图比较简单,如下:

 

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<DicomCEchoProvider>(104);
    Console.ReadLine();
}

 

C-Echo 过程分析

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

 

C-Echo Packet

  • 最上面红色框内的三行是建立 TCP 连接(三次握手)的过程;
  • 接着蓝色框内的两行是两个 AE 建立 Association 连接的过程;
  • 中间黄色框内的两行是两个 AE 之间 C-Echo 请求和响应的过程;
  • 最后面的蓝色框内的两行是两个 AE 通过 A-RELEASE 请求交互释放 Association 连接的过程;

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

 

C-Echo Response

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



作者:Statmoon
链接:https://www.jianshu.com/p/ef577f069f4b
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值