国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

dicom網絡通訊入門(1)

2019-11-17 03:14:58
字體:
來源:轉載
供稿:網友

dicom網絡通訊入門(1)

看標準 越看越糊,根本原因:dicom抽象得非常嚴重,是“專家”弄的。沒辦法。

又是什么服務類 又是什么sop,相信你把dicom標準看到頭大 都不知如何下手。 不就是 socket么 這有何難。 首先你得理解神馬叫pdu,從pdu入門 ,我只能這么說了。pdu就是pdu PRotocol data unit 反正就是這么個概念 你把它理解為socket數據包就行了。他的結構是開始1字節是pdu類型 然后一字節始終是0 ,然后是4字節 表示數據長度 然后是指定長度的數據。

簡圖:

然后專門為了 寫這個博客 我弄了點 測試數據,都是二進制文件

好然后我們立馬來設計一個程序,立馬 ok 開搞:

 1 namespace DcmEcho 2 { 3     class Program 4     { 5         static void Main(string[] args) 6         { 7             TcpClient client = new TcpClient(); 8             client.Connect("localhost", 104); 9             NetworkStream stream= client.GetStream();10 11             byte[] data = dump(0);12             byte[] data_res = new byte[1024];13             uint len = 0;14             stream.Write(data, 0, data.Length);15             stream.Read(data_res, 0, 2);16             stream.Read(data_res, 0, 4);17             //注意此處是big字節序要進行翻轉18             Array.Reverse(data_res, 0, 4);19             len = BitConverter.ToUInt32(data_res, 0);20             stream.Read(data_res, 0, (int)len);21 22             data = dump(1);23             stream.Write(data, 0, data.Length);24             stream.Read(data_res, 0, 2);25             stream.Read(data_res, 0, 4);26             Array.Reverse(data_res, 0, 4);27             len = BitConverter.ToUInt32(data_res, 0);28             stream.Read(data_res, 0, (int)len);29 30             data = dump(2);31             stream.Write(data, 0, data.Length);32 33             Console.ReadKey();34         }35 36         static byte[] dump(int indx)37         {38             string[] datas = new string[3];39             datas[0] = @"    01 00 00 00 00 CC 00 01 00 00 64 63 6D 70 72 69     40 6E 74 65 72 00 00 00 00 00 00 64 63 6D 56 69 65 41 77 65 72 00 00 00 00 00 00 00 00 00 00 00 00 00 42 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 00 00 00 00 00 00 00 00 00 00 10 00 00 15 31 2E 44 32 2E 38 34 30 2E 31 30 30 30 38 2E 33 2E 31 2E 45 31 2E 31 20 00 00 2E 01 00 00 00 30 00 00 11 31 46 2E 32 2E 38 34 30 2E 31 30 30 30 38 2E 31 2E 31 47 40 00 00 11 31 2E 32 2E 38 34 30 2E 31 30 30 30 48 38 2E 31 2E 32 50 00 00 39 51 00 00 04 00 00 40 49 00 52 00 00 1E 31 2E 32 2E 38 32 36 2E 30 2E 31 50 2E 31 32 33 34 35 36 37 2E 32 2E 31 33 39 36 2E 51 39 39 39 55 00 00 0B 41 53 53 41 53 53 4D 65 64 52 69 63                                           53 ";54             datas[1] = @"    04 00 00 00 00 4A 00 00 00 46 01 03 00 00 00 00  55 04 00 00 00 38 00 00 00 00 00 02 00 12 00 00 00 56 31 2E 32 2E 38 34 30 2E 31 30 30 30 38 2E 31 2E 57 31 00 00 00 00 01 02 00 00 00 30 00 00 00 10 01 58 02 00 00 00 03 00 00 00 00 08 02 00 00 00 01 01 59 ";60             datas[2] = @" 05 00 00 00 00 04 00 00 00 00";61 62             datas[indx] = datas[indx].Trim().Replace(" ", "");63             datas[indx] = datas[indx].Replace("/n", "");64             datas[indx] = datas[indx].Replace("/r", "");65 66             byte[] data = new byte[datas[indx].Length / 2];67             for (int i = 0; i < data.Length; i++)68             {69                 data[i] = (byte)Convert.ToInt32(datas[indx].Substring(i * 2, 2), 16);70             }71             return data;72         }73     }74 }

好 我們來測試下,我們始終都用這個程序進行測試:http://www.mrxstudio.com/也是由本人編寫。喏 ,echo響應測試成功:

理解這些了,然后呢 你不可能 每次別人來都把這一坨屎一樣的東西塞給別人吧,參數不一樣 請求的各種實例uid dimse命令 和數據都不一樣,不會報錯么 這是dicom協議 程序 不是普通的socket程序,雖然都是基于socket的。明白你要做什么了吧,坦白的說沒什么技術含量 但這卻是一個相當大的工程 并且要心細慢慢來。這是整個從協商連接 到打印完成要經過的步驟流程圖:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 云梦县| 马山县| 崇州市| 明星| 长治市| 寿阳县| 武功县| 扎鲁特旗| 汕尾市| 忻州市| 邵武市| 浦县| 崇州市| 石门县| 依兰县| 丰县| 河曲县| 兴宁市| 左权县| 昌江| 曲水县| 吉水县| 四平市| 黄平县| 扎囊县| 黔南| 温泉县| 苏州市| 永吉县| 东台市| 开鲁县| 曲松县| 临海市| 贡觉县| 奉节县| 绥芬河市| 修文县| 武宁县| 泸定县| 彩票| 安图县|