引言
经过前面几篇的介绍,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
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。