2009-10-19 54 views
8

是否有任何免費的開放源代碼庫(C/C++中)被廣泛使用並支持廣泛的操作系統(Windows,Unix/Linux ,FreeBSD等)。就像pthreads一樣。什麼是流行的多平臺免費開源套接字庫

否則唯一的解決辦法就是爲每個操作系統編寫套接字包裝。或者會寫一個封裝對winsock和GNU C sys/socket.h庫就足夠了?

難道我不能用GNU C提供的套接字庫來實現它嗎?GNU C可用於各種平臺,我的代碼可以在所有這些平臺上工作嗎?

+2

注意,C和C++會給截然不同的答案。僅僅因爲它們相似並不意味着你應該用兩者來標記問題。如果您需要C++庫,請將其標記爲C++ - 與本機C++庫相比,C庫將非常笨拙。 – 2009-10-19 06:48:03

+0

我正在編寫一個C++庫,但如果實現在C中,它可以與我保持一致。我可以同時使用這兩個庫。 – ata 2009-10-19 07:01:26

+1

難道我不能用GNU C提供的套接字庫來實現它嗎?GNU C可用於各種平臺,我的代碼可以在所有這些平臺上工作。 – ata 2009-10-19 11:58:26

回答

3

我相信Apache Portable Runtime和GTK +的GLib庫都有套接字API。由於你的問題被標記爲cc++我懷疑你確實需要以C++爲中心的答案,但這兩者都是純粹的C庫。

+0

Apache Portable Runtime是一個很好的建議。Apache也使用它,所以我認爲它會穩定,可擴展並且性能良好。 GLIB全面支持UNIX,但部分支持Windows。 – ata 2009-10-19 10:39:26

13

想想看boost

+1

boost.asio也可作爲獨立軟件包提供。 http://think-async.com/Asio/ – KitsuneYMG 2009-10-19 13:05:55

8

QT如果它對你來說不是太大。 Boost也有一些網絡代碼。 wxWidgets也與wxNet一起使用了一個網絡庫。另一個庫是Clanlib。當然SDL

3

是的,你會得到一個圍繞Winsock和標準伯克利套接字的包裝。實際上,差異非常小,幾乎可以直接在代碼中使用#ifdef

也就是說,如果你願意在套接字級別工作。如果你追求的是更抽象的東西,那麼當然包裝它給了你一個隱藏差異的好機會。

尤其Winsock的:

  • 要求您通過任何其他socket函數
  • 不允許你使用普通的舊的close()套接字上收到主叫WSAStartup()「啓動它」;您必須使用closesocket()
  • 要求您使用WSAGetLastError()來獲取最後一個錯誤,而不是簡單的errno

這些都是我頭頂的三大主角,可能還有更多。

+1

爲什麼?它已經做了幾十次,我懷疑你找不到你喜歡的界面。 – 2009-10-19 06:49:21

+0

@Chris:爲什麼? :)爲什麼要在套接字級別工作?我不知道,有時它是有道理的,但你仍然可能想要攜帶。 – unwind 2009-10-19 06:53:13

+0

我正在考慮編寫一個類(抽象如果它必須),這將隱藏差異。我可以從該類中派生出一個用於winsock和Linux套接字或任何其他庫的工具。 那就是如果我沒有找到一個小而高效的圖書館。 – ata 2009-10-19 07:45:05

4

ACE可能會幫助你!

如果你想有一個很輕的,C本教程提供了ACE OS適配層的概述和設計,並採用了C++的Socket封裝

Developing Efficient and Portable Communication Software with ACE and C++

+0

如果你看看ACE,不要被它的大小所淹沒。核心ACE庫具有易於使用的TCP和UDP類。在線文檔非常有參考價值。獲取「ACE程序員指南」一書,學習如何使用它。 – zooropa 2009-10-19 12:39:24

1

的++只,iostreams的風格的包裝圍繞BSD插座,你可以考慮skstream - 它很簡單,效果很好。當然,iostreams接口本身還有很多不足之處。不過,skstream並沒有包裝select和非常低級的套接字。

-2

這裏只有一個正確答案。 OpenSSL的。因爲一旦你有套接字代碼,你也想要建立SSL連接。如果您已經在特定的跨平臺框架中工作,則OpenSSL綁定可能已經可用。 我不認爲現在很多借口不SSL/TLS啓用您的應用程序從一開始。

+1

抱歉,我們正在討論套接字編程,而不是會話層或安全性。 – Test 2009-10-19 12:38:19

3

您可以嘗試的另一個選項是Poco。 Poco也有很多插座,所以如果你需要其他東西,它也可以提供。

它相較於其他工具包:

  1. Qt擁有圖形用戶界面和一些你不會找到波科非常複雜的功能,但它的很多大。
  2. Boost在實際功能方面沒有Poco那麼多,但它有像引用包裝器,MPL和預處理器這樣的庫,這些庫在其他地方都找不到。
  3. 我不太記得ACE,但我記得它在源代碼和組件方面非常非常大。 ACE似乎被用於非常高性能的網絡應用程序,所以它可能是矯枉過正的。但是,再次,我不太確定。

只是我的兩分錢

+0

從支持的平臺列表中,我找不到UNIX/Linux。另一方面,他們更重視嵌入式平臺。 – ata 2009-10-19 13:26:04

+1

Poco的支持平臺?他們支持Unix/Linux。它位於底部的主頁:Linux; HP-UX; Tru64的; Solaris操作系統。所有這些都是Unix或類Unix操作系統。 – blwy10 2009-10-19 13:42:26

相關問題