看板 C_Sharp 關於我們 聯絡資訊
各位先進好, 不好意思,我又帶奇怪的問題來請教大家了... 開發平台: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
liaommx:如果這樣呢?用一個假的程式開啟COM1, 07/26 22:44
liaommx:其他的程式都透過這個程式去監聽+寫入. 07/26 22:44
liaommx:這樣會不會好一點? 07/26 22:44
liaommx:有種man in the middle的感覺(資安的中間人腳色) 07/26 22:45
liaommx:當然,真正的sniffer不是這樣寫...@@".. 07/26 22:46
bbblue:L大的意思是寫一個class來呼叫嗎?@@ 07/26 22:55
bbblue:如果不是的話,跨程式的存取(呼叫)該如何實現呢?@@ 07/26 22:56
pico2k:com port不能共用,程式A/B可以用Socket溝通 07/27 10:30
leicheong:com port如果只是要監聽的話, 這是有可能的. 07/27 20:29
leicheong:且看sysinternals site中portmon.exe, 只要監測的程式 07/27 20:30
leicheong:先行就可以了. 07/27 20:30
leicheong:不過那功能需要寫kernel mode driver, C#應該不行吧... 07/27 20:32
liaommx:我的意思是只有A程式能開啟port,其他程式都透過A去做事情 07/27 20:55
liaommx:包含監聽,由A傳給其他程式聽到的資料,這樣 07/27 20:56
leicheong:不是說B也要經COM1回傳嗎? 這樣的話只有讓A以 07/27 22:42
leicheong:event filter偷看COM1的event, B程式在收到A的指示後 07/27 22:44
leicheong:直接經COM1寫入回傳的方式吧... 07/27 22:44
leicheong:例子可以看這: http://0rz.tw/ntDgw 不過是C++的... 07/27 22:46