我是新來的套接字編程,我需要實現基於UDP的無比率文件傳輸系統來驗證我的研究計劃。這裏是我需要做的:一個基於UDP套接字的無比率文件傳輸
我想要一個服務器S發送文件到一組對等體A,B,C ..等文件被分爲多個數據包。開始時,對等方會向服務器發送請求消息以初始化傳輸。每當S收到來自客戶端的請求時,它都會無條件地傳輸編碼數據包(如何編碼是由我的設計完成的,編碼本身具有擦除糾正功能,這就是爲什麼我可以通過UDP無比率地傳輸)給客戶端。客戶端不斷收集數據包並嘗試解碼它們。當它最終解碼所有數據包併成功重新構建文件時,它會向服務器發回停止消息,並且S將停止傳輸到此客戶端。
異步請求異步文件(他們可能會在不同的時間請求文件)。服務器必須能夠同時爲多個對等服務。不同客戶端的編碼數據包不同(它們都是從相同的源數據包編碼的,儘管如此)。
這是我在考慮的實現。儘管我對unix網絡編程沒有多少經驗,所以我想知道你能否幫我評估一下,看看它是否可行或有效。
我要實現服務器作爲併發UDP服務器與兩個套接字端口(類似於根據UNP書TFTP)。一種是接收控制消息,就像在我的上下文中那樣是請求和停止消息。服務器將爲每個請求維護一個標誌(最初爲1)。當它收到來自客戶端的停止消息時,該標誌將被設置爲0.
當服務器接收到請求時,它將fork()一個新進程,使用第二個套接字和端口將編碼數據包發送到客戶端。只要標誌爲1,服務器就會一直向客戶端發送數據包。當它變爲0時,發送結束。
客戶端程序很容易做到。只需發送Request,recvfrom()服務器,逐步解碼文件並在最後發送停止消息。
此設計是否可行?我所關心的主要問題是:(1)通過分叉多個進程來提高效率?或者我應該使用線程? (2)如果我必須使用多個進程,該子進程怎樣才能知道該標誌位?感謝您的意見。
你如何定義無比率? – Indy9000 2012-04-17 17:33:40
你使用哪種編程語言? – 2012-04-17 17:37:03