2012-03-16 85 views
0

我正在開發C中的客戶端服務器程序。服務器支持來自同一端口的多個連接,併爲每個連接的客戶端創建一個新進程。客戶端能夠向服務器發送多個命令並從那裏獲取結果。其中一個命令是'get',用於將任何文件從服務器傳輸到客戶端。 (如獲取abc.txt bcd.pdf ...)。來自同一客戶端的多個連接

但是,這個傳輸操作應該在不同的線程中完成。例如,如果客戶端請求從服務器傳輸3個文件;服務器端和客戶端都創建了3個不同的線程。因此,客戶端將創建client_thread1,client_thread2,client_thread3,服務器將爲這些文件創建server_thread1,server_thread2,server_thread3。然後第一個文件將被server_thread1上傳到client_thread1,第二個文件將被server_thread2上傳到client_thread2等等。

這是我堅持的唯一觀點。我如何使用客戶端線程來匹配服務器線程;以便服務器線程只與客戶端線程進行通信,而服務器和客戶端則自由地完成自己的工作。

感謝您的幫助。

+4

FWIW,爲每次傳輸創建一個線程是一個非常糟糕的主意,如果你想這個擴展。有關替代方法,請參閱http://www.kegel.com/c10k.html。 – 2012-03-16 19:26:32

+0

爲什麼?同時傳輸三個文件的速度並不比傳輸速度快得多。網絡是瓶頸,你不能多線程。 – EJP 2012-03-18 22:06:52

回答

1

如果你想在文件傳輸之間取得獨立的進展,那麼你必須打開多個連接到你的服務器。所以你會爲命令通道設置一個單獨的套接字,併爲每個併發文件傳輸設置一個套接字。然後,您可以從一個單獨的線程(壞,如上所述)或使用諸如poll之類的東西來服務每個套接字以在一個線程上覆用套接字處理。就像這樣,你重寫了FTP :)

或者,你可以想出一些方案來複用一個套接字上的幾個文件傳輸。

相關問題