2010-12-14 35 views
0

回到關於在套接字編程中使用C文件流的問題。我在閱讀這篇文章,看到了各種各樣的評論 - 有些人說它不可靠(即抽象漏洞?)。在C套接字編程中使用C FILE流

有沒有人得到一個關於在套接字編程中使用C文件流的觀點?

+0

AFAIK,這應該只適用於某些編譯器/操作系統,如果有的話。 – Simone 2010-12-14 09:50:40

+0

謝謝西蒙娜!我應該檢查它是否適用於我的目標平臺... – Poliquin 2010-12-14 15:22:03

回答

4

是的。別。

TCP和UDP協議有太多的語義,很容易映射到您的常用文件流API。這並不是說這是不可能的或者甚至是困難的,但是可能會有很多很多棘手的問題和邊緣案例會給你帶來無法預測的行爲。我也無法想象你可能想將套接字視爲普通文件的任何應用程序的頭頂。

在一天結束時,一旦您處理了綁定,監聽和接受,您無法使用C文件流進行處理,並將生成的文件描述符打包爲文件流類型,您將要進行的所有操作要做的就是使用fread()和fwrite(),也許是fgetc(),所以你可以把它作爲一個普通的文件描述符和我們recv()和send()來保存自己纏繞的麻煩。您可以節省處理緩衝的麻煩,但通過控制緩衝區,您可以調整緩衝區以滿足應用程序的要求,並節省一些網絡開銷和速度。

+0

謝謝AlastairG!我從你的討論中學到了很多東西。 – Poliquin 2010-12-14 15:22:43

0

這取決於您正在編寫的應用程序的類型。 FILE流不適用於非阻塞,異步或基於IO的IO。對於執行連接到服務器,發出一些請求並獲得結果的順序任務的命令行程序而言,這可能不成問題。它也適用於僅運行inetd的服務器進程。但是,如果你的應用程序將以事件爲基礎進行任何操作,那麼你遇到了麻煩。如果你真的想在基於事件的應用程序中使用帶有套接字的FILE流,可以使用線程來實現,但我懷疑這是個好主意......

+0

謝謝R ..!我的意圖是去異步連接。但我現在可以將其縮小到一個順序程序。但是我正在尋找能夠處理至少80個併發連接的東西。這些連接將發送不間斷數據。 – Poliquin 2010-12-14 15:24:36