[FlagsAttribute()]public enum DicomNetIpTypeFlags
[FlagsAttribute()]public enum class DicomNetIpTypeFlags
| Value | Member | Description |
|---|---|---|
| 0x00000000 | None | None. |
| 0x00000001 | Ipv4 | Only support IPv4 addresses. |
| 0x00000002 | Ipv6 | Only support IPv6 addresses. |
| 0x00000003 | Ipv4OrIpv6 | Support both IPv4 and IPv6 addresses. |
This enumeration is used with Listen and Connect to specify the version of the Internet Protocol that will be used.
using Leadtools;using Leadtools.Dicom;///[StructLayout(LayoutKind.Sequential)]public struct MYMSG{public IntPtr hwnd;public uint message;public IntPtr wParam;public IntPtr lParam;public uint time;public System.Drawing.Point p;}public enum MyWaitReturn{Complete,Timeout,}class MyUtils{[DllImport("user32.dll")][return: MarshalAs(UnmanagedType.Bool)]static extern bool PeekMessage(out MYMSG lpMsg, IntPtr hWnd,uint wMsgFilterMin, uint wMsgFilterMax,uint wRemoveMsg);[DllImport("user32.dll")]static extern bool TranslateMessage([In] ref MYMSG lpMsg);[DllImport("user32.dll")]static extern IntPtr DispatchMessage([In] ref MYMSG lpmsg);const uint PM_REMOVE = 1;public static MyWaitReturn WaitForComplete(double mill, WaitHandle wh){TimeSpan goal = new TimeSpan(DateTime.Now.AddMilliseconds(mill).Ticks);do{MYMSG msg = new MYMSG();if (PeekMessage(out msg, IntPtr.Zero, 0, 0, PM_REMOVE)){TranslateMessage(ref msg);DispatchMessage(ref msg);}if (wh.WaitOne(new TimeSpan(0, 0, 0), false)){return MyWaitReturn.Complete;}if (goal.CompareTo(new TimeSpan(DateTime.Now.Ticks)) < 0){return MyWaitReturn.Timeout;}} while (true);}}class MyClient : DicomNet{DicomExceptionCode _LastError = DicomExceptionCode.Success;AutoResetEvent waitEvent = new AutoResetEvent(false);public MyClient(): base(null, DicomNetSecurityMode.None){}public DicomExceptionCode LastError{get{return _LastError;}}public bool Wait(){_LastError = DicomExceptionCode.Success;MyWaitReturn ret = MyUtils.WaitForComplete((5 * 60) * 1000, waitEvent);return (ret == MyWaitReturn.Complete);}protected override void OnConnect(DicomExceptionCode error){Debug.WriteLine("Client: Receive OnConnect");_LastError = error;waitEvent.Set();}protected override void OnReceiveReleaseResponse(){Debug.WriteLine("Client: Receive OnReceiveReleaseResponse");waitEvent.Set();}}class MyServerConnection : DicomNet{public bool Fail = false;public MyServerConnection(): base(null, DicomNetSecurityMode.None){}protected override void OnReceiveReleaseRequest(){Debug.WriteLine("Server: Receive OnReceiveReleaseRequest");SendReleaseResponse();}};class MyServer : DicomNet{MyServerConnection client;public MyServer(): base(null, DicomNetSecurityMode.None){}public bool Fail{get{if (client == null)return false;return client.Fail;}set{if (client != null){client.Fail = value;}}}protected override void OnAccept(DicomExceptionCode error){Debug.WriteLine("Server: Receive OnAccept");client = new MyServerConnection();Accept(client);string s = string.Format("\tPeerAddress: {0}\n\tPeerPort: {1}", client.PeerAddress, client.PeerPort);Debug.WriteLine(s);}}public void DicomDataSet_ListenExample(){DicomEngine.Startup();DicomNet.Startup();using (MyServer server = new MyServer()){using (MyClient client = new MyClient()){// The * below means to listen on all local IP addresses.// The DicomNetIpTypeFlags.Ipv4OrIpv6 means to listen on both IPv4 and IPv6 addressesserver.Listen("*", 104, 1, DicomNetIpTypeFlags.Ipv4OrIpv6); // start server// The client is connecting to the server using an IPv6 address.// Note that "::1" is the IPv6 loopback address// Alternatively, you can get type ipconfig from a command box on the local computer to get the local IPv6 address.// The following is an example of a local IPv6 address:// "fe80::18bd:81f:6b02:759f"client.Connect(null, 1000, "::1", 104, DicomNetIpTypeFlags.Ipv6); // connect to serverif (!client.Wait()) // wait for connection to finish{Assert.Fail("Connection timed out");}if (client.LastError == DicomExceptionCode.NetAddressInUse){client.CloseForced(true);server.CloseForced(true);DicomEngine.Shutdown();DicomNet.Shutdown();}Assert.IsTrue(client.LastError == DicomExceptionCode.Success, $"Connection failed: {client.LastError} ");Assert.IsTrue(client.IsConnected() == true, $"Client {client} not connected");client.SendReleaseRequest();if (!client.Wait()) // wait for connection to finish{Assert.Fail("Timed Out");}// Close the connectionsclient.CloseForced(true);}server.CloseForced(true);}DicomEngine.Shutdown();DicomNet.Shutdown();}
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document
