L_DicomListenExt

# include“ltdic.h”

L_LTDIC_APIL_INTL_DicomListenExt(hNet, pszHostAddress, nHostPort, nNbPeers, nIpType)

建立连接以侦听传入的连接请求。

参数

HDICOMNEThNet

一个DICOM网络句柄。方法返回的句柄L_DicomCreateNet函数。

L_TCHAR* pszHostAddress

包含主机的IP地址(服务器地址)的字符串。

L_UINTnHostPort

主机端口号(服务器端口号)。

L_INTnNbPeers

传递给WinSock listen()函数的backlog参数的值,用于限制等待连接的队列大小。

L_INTnIpType

IP地址类型。可能取值为:

价值 意义
DICOM_IPTYPE_NONE [0x000]用于初始化。
DICOM_IPTYPE_IPV4 [0x001]只使用IPv4地址。
DICOM_IPTYPE_IPV6 [0x002]只使用IPv6地址。
DICOM_IPTYPE_IPV4_OR_IPV6 [0x003]同时使用IPv4和IPv6地址。

返回

价值 意义
DICOM_SUCCESS 活动很成功。
>0 发生错误。指返回代码

评论

L_DicomListenExt()是L_DicomListen()的扩展,允许您指定要使用哪种类型的Internet协议版本。

如果pszHostAddress为“”或NULL,则IP地址将是本地计算机的地址。

如果pszHostAddress为“*”,则IP地址将是本地计算机的所有地址。如果本地计算机有多个网络接口和地址,这很有用。

如果nHostPort为0,则端口号为第一个可用的端口号。

要作为客户端连接到服务器,必须首先使用创建并初始化DICOM网络的句柄L_DicomCreateNet.接下来,设置将通过调用使用的回调函数L_DicomSetCallback.然后调用L_DicomConnectL_DicomConnectExt(如果需要IPv6支持)来建立连接。

要将计算机用作服务器,必须首先使用创建并初始化DICOM网络的句柄L_DicomCreateNet.接下来,设置将通过调用使用的回调函数L_DicomSetCallback.然后调用L_DicomListen或L_DicomListenExt监听传入的连接请求。

L_DicomListenExt()是L_DicomListen()的扩展,它允许您指定要使用的Internet协议版本的类型。为nIpType传递DICOM_IPTYPE_IPV4以支持Internet协议版本4 (IPv4),这是自1981年以来一直在使用的标准“点分四”32位地址格式。例如IPv4地址为192.168.0.195

为“nIpType”配置DICOM_IPTYPE_IPV6,以支持IPv6。IPv6使用128位地址格式。IPv6地址的示例为fe80::18bd:81f: 6b2 . 759f

为了同时支持IPv4和Ipv6地址,nIpType需要传递DICOM_IPTYPE_IPV6。

如果对L_DicomListenExt的调用失败,请确保传递给pszHostAddress的IP地址是在网络中可访问的有效地址。使用windows ping命令可以验证IPv4地址和IPv6地址的可访问性。例如,要验证192.168.0.195在您的网络中是可访问的,请执行以下操作:

  1. 启动命令提示符,并键入以下命令。

  2. 萍192.168.0.195

注意以下是等价的:

nNbPeers参数指定了WinSock listen()函数使用的backlog参数的大小。例如,假设将值设置为3,并且有4个人试图同时连接。在这种情况下,所有4个都将被拒绝,因为连接积压队列已满。但如果在第四个连接建立之前,其中一个连接已经被接受,那么所有连接都将正常工作。

执行以下步骤确定连接的客户端数量并设置最大连接数:

  1. 使用L_GetClientCount函数在“OnReceiveAssociateRequest”处理程序。

  2. 将该值与允许的最大连接数进行比较。

  3. 如果连接的客户端数量大于允许的最大连接数,则向试图连接的客户端发送“SendAssociateReject”命令。

必需的dll和库

平台

Win32, x64, Linux。

另请参阅

功能

主题

例子

这个示例实现了一个非常基本的服务器,它侦听所有本地IPv4和IPv6地址。
首先运行此示例,然后运行的示例L_DicomConnectExt,这是一个非常基本的客户端,将连接到这个服务器。

//向前声明L_VOID EXT_CALLBACK OnAcceptCB(HDICOMNET, L_INT nError, L_VOID* pUserData);L_INT DicomListenExtExample (L_VOID)L_INT nRet = L_DicomStartUp();如果(nRet != DICOM_SUCCESS)返回nRet;HDICOMNET hServer = L_DicomCreateNet(NULL, DICOM_SECURE_NONE);/*设置回调函数*/DICOMNETCALLBACK cb = {0};cb。pfnAccept = (ACCEPTCALLBACK)OnAcceptCB;cb。pUserData = NULL;L_DicomSetCallback (hServer cb);//创建一个服务器来接收最多25个客户端//监听所有本地IP地址(IPv4和IPv6)nRet = L_DicomListenExt(hServer, TEXT(“*”), 104, 25, dicom_iptype_ipv4_or_ipv6);返回nRet;L_VOID EXT_CALLBACK OnAcceptCB(HDICOMNET, L_INT nError, L_VOID* pUserData)L_TCHAR szMsg[800] = {0};L_TCHAR szTemp[800] = {0};HDICOMNET hClient = 0;L_INT32 lClients = 0;L_TCHAR szPeerAddress[200] = {0};L_TCHAR szHostAddress[200] = {0};L_UINT uPort = 0;L_INT nRet = DICOM_SUCCESS;L_TCHAR *pszMessageBoxTitle = TEXT(“接受”);UNREFERENCED_PARAMETER (pUserData);wsprintf (szMsg文本("***NetAccept Event ***\n nStatus[%d]\n"), nError);如果(错误!= DICOM_SUCCESS)MessageBox(NULL, szMsg, pszMessageBoxTitle, MB_OK);返回//接受连接尝试hClient = L_DicomCreateNet(NULL, DICOM_SECURE_NONE);L_DicomAccept (hNet hClient);//这里我们通常设置回调函数//对于这个例子,我们不设置任何回调//关于如何设置回调的完整示例,请参见L_DicomListen的示例lstrcat (szMsg文本(“接受\ n”));//显示一些关于连接的信息nRet = L_DicomGetHostInfo(hNet, szHostAddress, 200, &uPort);如果(nRet != DICOM_SUCCESS)对话框(NULL,文本(“OnAcceptCB错误”), pszMessageBoxTitle, MB_OK);返回wsprintf (szTemp文本(“HostAddress (% s) \ nHostPort % d \ n”), szHostAddress, uPort);lstrcat (szMsg szTemp);//显示客户端信息lClients = L_DicomGetClientCount(hNet);hClient = L_DicomGetClient(hNet, lClients - 1);wsprintf (szTemp文本(“ClientCount % d \ n”), lClients);lstrcat (szMsg szTemp);nRet = L_DicomGetPeerInfo(hClient, szPeerAddress, 200, &uPort);如果(nRet != DICOM_SUCCESS)对话框(NULL,文本(“OnAcceptCB错误”), pszMessageBoxTitle, MB_OK);返回wsprintf (szTemp文本(“PeerAddress (% s) \ nPeerPort % d \ n”), szPeerAddress, uPort);lstrcat (szMsg szTemp);MessageBox(NULL, szMsg, pszMessageBoxTitle, MB_OK);

LEADTOOLS DICOM C API帮助
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。