[問題] 多程式共用serial port

看板C_Sharp作者 (植物進化中...)時間15年前 (2010/07/26 21:56), 編輯推噓5(5013)
留言18則, 4人參與, 最新討論串1/2 (看更多)
各位先進好, 不好意思,我又帶奇怪的問題來請教大家了... 開發平台:vs 2008 C# 作業系統:winXP SP3 系統架構:client-server-equipment 問題: 我的系統架構具有2個程式, 分別是程式A(window Form) 與程式B(web service) 程式A常駐在server本機端監聽COM1所收到的末端設備資訊; 程式B則由client端的使用者呼叫後, 將命令送至server,再同樣透過COM1將命令送至設備端。 因此,在server端不安裝serial port分享器的前提下, 是否有辦法讓兩個程式共用COM1呢? (p.s. COM1為實體port,非virtual com port) 個人想法: 如果2個需求都在同一程式的話, 是滿好解決的,但在不同程式的狀況下, 程式A又是常駐型監聽程式, 也就是SerialPort物件完全不會close, 因此程式B永遠沒有機會open另一個SerialPort物件來進行傳輸... 那麼sniffer是如何辦到... 在其他程式使用某com port的情況下同時監聽呢? 我們有辦法自己寫程式做到嗎? 目前唯一想到的解套方式, 就是當client呼叫web service時, server端將收到的資料存進資料庫, 程式A再定時quary資料庫取得命令進行發送, 這樣就可以在同一程式下對同一SerialPort進行存取, 但如此一來client端命令就無法即時執行... 目前還沒想到比較適當的解套辦法, 還請有經驗的先進提攜指點一下可能的方向了, 謝謝大家! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.132.23.123

07/26 22:44, , 1F
如果這樣呢?用一個假的程式開啟COM1,
07/26 22:44, 1F

07/26 22:44, , 2F
其他的程式都透過這個程式去監聽+寫入.
07/26 22:44, 2F

07/26 22:44, , 3F
這樣會不會好一點?
07/26 22:44, 3F

07/26 22:45, , 4F
有種man in the middle的感覺(資安的中間人腳色)
07/26 22:45, 4F

07/26 22:46, , 5F
當然,真正的sniffer不是這樣寫...@@"..
07/26 22:46, 5F

07/26 22:55, , 6F
L大的意思是寫一個class來呼叫嗎?@@
07/26 22:55, 6F

07/26 22:56, , 7F
如果不是的話,跨程式的存取(呼叫)該如何實現呢?@@
07/26 22:56, 7F

07/27 10:30, , 8F
com port不能共用,程式A/B可以用Socket溝通
07/27 10:30, 8F

07/27 20:29, , 9F
com port如果只是要監聽的話, 這是有可能的.
07/27 20:29, 9F

07/27 20:30, , 10F
且看sysinternals site中portmon.exe, 只要監測的程式
07/27 20:30, 10F

07/27 20:30, , 11F
先行就可以了.
07/27 20:30, 11F

07/27 20:32, , 12F
不過那功能需要寫kernel mode driver, C#應該不行吧...
07/27 20:32, 12F

07/27 20:55, , 13F
我的意思是只有A程式能開啟port,其他程式都透過A去做事情
07/27 20:55, 13F

07/27 20:56, , 14F
包含監聽,由A傳給其他程式聽到的資料,這樣
07/27 20:56, 14F

07/27 22:42, , 15F
不是說B也要經COM1回傳嗎? 這樣的話只有讓A以
07/27 22:42, 15F

07/27 22:44, , 16F
event filter偷看COM1的event, B程式在收到A的指示後
07/27 22:44, 16F

07/27 22:44, , 17F
直接經COM1寫入回傳的方式吧...
07/27 22:44, 17F

07/27 22:46, , 18F
例子可以看這: http://0rz.tw/ntDgw 不過是C++的...
07/27 22:46, 18F
文章代碼(AID): #1CJPGYER (C_Sharp)
文章代碼(AID): #1CJPGYER (C_Sharp)