2014-09-22 28 views
1

我已經實現了一個C庫,並希望向UI公開其功能。用戶界面將是Windows窗體用戶界面或WPF用戶界面。要想出一個更「平臺獨立」的方式將UI和C庫綁在一起,我曾想過在UI端和C端創建一個套接字。該套接字將用於在UI和庫之間交換雙向消息。我知道這樣做可能會有一些開銷,但UI和C代碼之間的「消息流量」不會很大。用於在UI和C代碼之間進行消息傳遞的套接字?

這樣做的另一個原因是因爲我已經讀過,有太多的陷阱,當你使用PInvoke,IJW,COM或CLI(用於啓用C#到C調用和C到C#呼叫)。這種套接字方式使得它更加乾淨,當C#代碼向C代碼發送消息時(或以其他方式),我將更好地控制實際發生的事情。

爲了開始並避免浪費時間,我正在尋找一些經驗豐富的開發人員的建議,他們對套接字代碼有很多瞭解。

我不確定雙方的套接字代碼的要求應該是什麼?我知道我希望UI端的任何組件都能夠發送和響應消息。

UI communicates with C module through a socket

+0

你的「插座」的意思是:網絡套接字?也許你可以使用命名管道。命名管道可以在C++端和C#端創建。在C#端你有'NamedPipeServerStream'和'NamedPipClientStream'。您可以通過「Stream」接口訪問它們。 – Sjips 2014-09-22 17:27:16

+0

這個_almost_聽起來應該在[Programmers.SE]上(http://programmers.stackexchange.com/)。 – gunr2171 2014-09-22 17:28:21

+0

爲什麼不使用Windows Communication Foundation? http://msdn.microsoft.com/en-us/library/dd456779(v=vs.110).aspx – Paparazzi 2014-09-22 17:32:59

回答

0

使用套接字需要你的C程序成爲一個服務器,這將打開一個套接字和監聽。收到請求後,它會執行一些操作並通常返回一個答案。這個想法是聯網電腦之間的溝通。

這裏是一個基本的例子。 http://www.linuxhowtos.org/C_C++/socket.htm

編寫套接字代碼需要發送應用程序和接收應用程序之間的兼容數據格式。這意味着您需要仔細構造消息並確保每個整數,長整數,浮點數,雙精度和固定長度字符串完全匹配。一邊的額外字節會將您的信息拼湊成垃圾。如果你的c和c#數據編碼格式不匹配 - 你將會有額外的解碼/格式化工作。

我更喜歡使用ONC-RPC在不等系統之間編寫客戶端服務器代碼。十年前,我使用RPC將大端Solaris連接到小端VMS系統 - 它的工作完美無瑕,寫起來非常快。

我會避免編寫低級套接字代碼,因爲它是耗時且困難的,除非您需要高性能的網絡應用程序。

相關問題