看標准 越看越糊,根本原因:dicom抽象得非常嚴重,是“專家”弄的。沒辦法。
又是什麼服務類 又是什麼sop,相信你把dicom標准看到頭大 都不知如何下手。 不就是 socket麼 這有何難。 首先你得理解神馬叫pdu,從pdu入門 ,我只能這麼說了。pdu就是pdu protocol data unit 反正就是這麼個概念 你把它理解為socket數據包就行了。他的結構是開始1字節是pdu類型 然後一字節始終是0 ,然後是4字節 表示數據長度 然後是指定長度的數據。
簡圖:
然後專門為了 寫這個博客 我弄了點 測試數據,都是二進制文件
好然後我們立馬來設計一個程序,立馬 ok 開搞:
Main( TcpClient client = client.Connect(, NetworkStream stream= [] data = dump( [] data_res = [ len = stream.Write(data, stream.Read(data_res, , stream.Read(data_res, , Array.Reverse(data_res, , len = BitConverter.ToUInt32(data_res, stream.Read(data_res, , ( data = dump( stream.Write(data, stream.Read(data_res, , stream.Read(data_res, , Array.Reverse(data_res, , len = BitConverter.ToUInt32(data_res, stream.Read(data_res, , ( data = dump( stream.Write(data, [] dump( [] datas = [ datas[] = datas[] = datas[] = datas[indx] = datas[indx].Trim().Replace( , datas[indx] = datas[indx].Replace(, datas[indx] = datas[indx].Replace(, [] data = [datas[indx].Length / ( i = ; i < data.Length; i++ data[i] = ()Convert.ToInt32(datas[indx].Substring(i * , ), }
好 我們來測試下,我們始終都用這個程序進行測試:http://www.mrxstudio.com/ 也是由本人編寫。
喏 ,echo響應測試成功:
理解這些了,然後呢 你不可能 每次別人來都把這一坨屎一樣的東西塞給別人吧,參數不一樣 請求的各種實例uid dimse命令 和數據都不一樣,不會報錯麼 這是dicom協議 程序 不是普通的socket程序,雖然都是基於socket的。明白你要做什麼了吧,坦白的說沒什麼技術含量 但這卻是一個相當大的工程 並且要心細慢慢來。這是整個從協商連接 到打印完成要經過的步驟流程圖: