【问题标题】:fo-DICOM: How to specify the local outgoing port in DicomClient?fo-DICOM:如何在 DicomClient 中指定本地传出端口?
【发布时间】:2020-09-21 12:48:26
【问题描述】:

TcpClient 可以按照here 的描述分配本地传出端口。

fo-DICOMDicomClient 是否可以具有相同的功能?

这是必要的,因为服务器只监听来自特定客户端端口的连接。

【问题讨论】:

    标签: c# .net dicom fo-dicom


    【解决方案1】:

    此答案适用于 fo-DICOM 的旧版本(4.0.1.0 或附近)。在最新版本中,此答案中提到的类和方法已被弃用。


    使用DicomClient.Send的重载方法,INetworkStream可以在作为SCU使用fo-DICOM的同时提供本地输出端口。

    例如,有四种方法可用于将 CSTORE 作为 SCU。前两个是:

    public void Send(string host, int port, bool useTls, string callingAe, string calledAe, int millisecondsTimeout = 5000);
    public Task SendAsync(string host, int port, bool useTls, string callingAe, string calledAe, int millisecondsTimeout = 5000);
    

    hostport 是远程主机和远程端口。它都不接受IPEndPoint 作为参数。

    现在,看看其他两种方法:

    public void Send(INetworkStream stream, string callingAe, string calledAe, int millisecondsTimeout = 5000);
    public Task SendAsync(INetworkStream stream, string callingAe, string calledAe, int millisecondsTimeout = 5000);
    

    那些接受INetworkStream,如下所示:

    public interface INetworkStream : IDisposable
    {
        string LocalHost { get; }
        int LocalPort { get; }
        string RemoteHost { get; }
        int RemotePort { get; }
        Stream AsStream();
    }
    

    这允许向您提供LocalPort。您需要为该接口编写实现。不确定DesktopNetworkStreamINetworkStream的实现)是否可以直接使用。

    【讨论】:

      【解决方案2】:

      您提出了issue on github。以下是那里的反馈:

      目前不支持此功能。您可以通过实现自己的NetworkManager 来解决此限制,并从现有的DesktopNetworkManagerDesktopNetworkStream 中汲取灵感。在DesktopNetworkStream 中,创建了TcpClient。这是您需要进行自定义更改的地方。

      查看那里的reply to my comment,看来问题现已修复,该功能现已可用。

      【讨论】:

        猜你喜欢
        • 2018-09-23
        • 2014-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多