2

有一种TcpClient分配本地传出端口的方法,如此所述。

fo-DICOM 是否可以具有相同的功能DicomClient

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

4

2 回答 2

4

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


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

例如,有四种方法可用于 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给您。您需要为该接口编写实现。不确定DesktopNetworkStream(的实现INetworkStream)是否可以直接使用。

于 2020-09-21T13:46:19.903 回答
1

您在 github 上提出了问题。以下是那里的反馈:

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

查看那里对我的评论的回复,看来该问题现已解决,该功能现已可用。

于 2020-09-28T10:05:01.580 回答