2013-12-09 171 views
0

我有一個需要編程接受來自在給定的環境不同的系統的TCP數據包的服務器應用程序。這些消息可以是消息類型的有限列表;例如新庫存(新項目記錄),庫存位置更改(庫存現在位於位置X),傳送請求(請將庫存ID XYZ從位置X移至位置Y)。TCP套接字(服務器)設計

我的問題是,爲每個入站消息類型設置一個套接字(端口號)是一個好主意,這樣我就可以避免在數據報中需要某種類型的標識符來指明它是什麼類型的消息,因此讓我知道消息的格式,以便我可以處理它?

我寫斷絕在.NET但TCP郵件的發件人是現有的,non-.NET系統。我的計劃是設置一個將消息保存到MSMQ中進行進一步處理的異步服務器。 (http://msdn.microsoft.com/en-us/library/fx6588te(v=vs.110).aspx

+0

這無疑將是一個非常不尋常的* *的方式來做到這一點 - 這將需要更多的插座開銷假設大多數客戶端需要發送多於一個類型的消息。我不這樣做 –

+0

這樣說吧:假設你必須在路由器上更改UDP數據包的路由。您希望與您的路由器的神祕和令人難以置信的命令界面交互多久?一個端口是綽綽有餘.. –

+1

@馬丁eugh - 每次添加一個消息時,防火牆的變化:我的系統管理員會要求在血液 –

回答

0

,我寫的應用程序與多個設備,其中只有一個是PC服務器,其餘的都PLC的製造過程中使用通信。每個發送/接收端口都打開和關閉。當我向PC服務器發送三個不同的TCP消息時,我最終做的是使用公共端口接收來自PC服務器的不同TCP消息和默認發送端口(由.NET Framework選擇)。關於PLC的設計,我需要使用專用端口(保持打開狀態)來接收TCP消息(每個消息類型[三個不同的消息類型]一個專用端口)和一個專用端口來發送每種消息類型因爲PLC希望綁定到一個固定的端口號(再次,每個端口必須保持打開狀態)。

感謝大家的幫助。這是我的第一個TCP應用程序,回想起來,它涉及到了(下一次我將開始一個Hello World應用程序!)。我現在有一臺120噸的軌道式起重機,將30噸從熱軋機上偷取(即1,500度)的角色移動到冷卻場中。所有設備之間的通信,我的SQL Server和VB Windows服務都可以正常工作(他們說VB是二流語言!)。

0

如果你正在使用現有的系統,你需要弄清楚它的message protocol是什麼,並找出如何解釋它並遵循現有的系統使用。任何使用套接字的程序都有某種形式的「規則」來表明這些信息將會是什麼,你需要找出這些規則是什麼,並讓你的服務器軟件遵循這些規則。

如果您的服務器軟件需要與多種類型的系統進行通信,那麼每個系統類型使用不同的端口,但不能爲每個系統類型使用不同的端口類型,因爲這需要告訴現有系統更改其系統「消息協議」來適應你的新設計。

+0

謝謝您的回答付款,這是一個很大的幫助有別人其實檢查了我的思維。我以前從來沒有必須對套接字層通信進行編程,通常我的工作方式超出了這種類型的通信方式,您的(Marc和Martin的)角度對此非常有幫助。我正在學習,我必須弄清楚如何設計信息......美好時光。我希望我能堅持SQL Server開發!我需要弄清楚如何最好地獲取這些消息,以便我可以處理它們(這是我用來編寫的代碼)。 – Christopher

+0

如果你正在編寫新的東西,而不是嘗試使用現有的東西,我會建議完全避免套接字,並與一個圖書館,給你一個抽象層,並處理所有的消息框架和不適合你。內置到.NET中的[WCF庫](http://msdn.microsoft.com/en-us/library/ms731082%28v=vs.110%29.aspx)很好,並且有很多第三方庫也是。 –

相關問題