是否有任何免費的開放源代碼庫(C/C++中)被廣泛使用並支持廣泛的操作系統(Windows,Unix/Linux ,FreeBSD等)。就像pthreads一樣。什麼是流行的多平臺免費開源套接字庫
否則唯一的解決辦法就是爲每個操作系統編寫套接字包裝。或者會寫一個封裝對winsock和GNU C sys/socket.h庫就足夠了?
難道我不能用GNU C提供的套接字庫來實現它嗎?GNU C可用於各種平臺,我的代碼可以在所有這些平臺上工作嗎?
是否有任何免費的開放源代碼庫(C/C++中)被廣泛使用並支持廣泛的操作系統(Windows,Unix/Linux ,FreeBSD等)。就像pthreads一樣。什麼是流行的多平臺免費開源套接字庫
否則唯一的解決辦法就是爲每個操作系統編寫套接字包裝。或者會寫一個封裝對winsock和GNU C sys/socket.h庫就足夠了?
難道我不能用GNU C提供的套接字庫來實現它嗎?GNU C可用於各種平臺,我的代碼可以在所有這些平臺上工作嗎?
我相信Apache Portable Runtime和GTK +的GLib庫都有套接字API。由於你的問題被標記爲c
和c++
我懷疑你確實需要以C++爲中心的答案,但這兩者都是純粹的C庫。
Apache Portable Runtime是一個很好的建議。Apache也使用它,所以我認爲它會穩定,可擴展並且性能良好。 GLIB全面支持UNIX,但部分支持Windows。 – ata 2009-10-19 10:39:26
是的,你會得到一個圍繞Winsock和標準伯克利套接字的包裝。實際上,差異非常小,幾乎可以直接在代碼中使用#ifdef
。
也就是說,如果你願意在套接字級別工作。如果你追求的是更抽象的東西,那麼當然包裝它給了你一個隱藏差異的好機會。
尤其Winsock的:
WSAStartup()
「啓動它」;您必須使用closesocket()
WSAGetLastError()
來獲取最後一個錯誤,而不是簡單的errno
。這些都是我頭頂的三大主角,可能還有更多。
ACE可能會幫助你!
如果你想有一個很輕的,C本教程提供了ACE OS適配層的概述和設計,並採用了C++的Socket封裝
Developing Efficient and Portable Communication Software with ACE and C++
如果你看看ACE,不要被它的大小所淹沒。核心ACE庫具有易於使用的TCP和UDP類。在線文檔非常有參考價值。獲取「ACE程序員指南」一書,學習如何使用它。 – zooropa 2009-10-19 12:39:24
的++只,iostreams的風格的包裝圍繞BSD插座,你可以考慮skstream - 它很簡單,效果很好。當然,iostreams接口本身還有很多不足之處。不過,skstream並沒有包裝select和非常低級的套接字。
這裏只有一個正確答案。 OpenSSL的。因爲一旦你有套接字代碼,你也想要建立SSL連接。如果您已經在特定的跨平臺框架中工作,則OpenSSL綁定可能已經可用。 我不認爲現在很多借口不SSL/TLS啓用您的應用程序從一開始。
抱歉,我們正在討論套接字編程,而不是會話層或安全性。 – Test 2009-10-19 12:38:19
使用boost :: asio。非常好的圖書館。請點擊此鏈接 http://www.boost.org/doc/libs/1_40_0/doc/html/boost_asio.html
您可以嘗試的另一個選項是Poco。 Poco也有很多插座,所以如果你需要其他東西,它也可以提供。
它相較於其他工具包:
只是我的兩分錢
注意,C和C++會給截然不同的答案。僅僅因爲它們相似並不意味着你應該用兩者來標記問題。如果您需要C++庫,請將其標記爲C++ - 與本機C++庫相比,C庫將非常笨拙。 – 2009-10-19 06:48:03
我正在編寫一個C++庫,但如果實現在C中,它可以與我保持一致。我可以同時使用這兩個庫。 – ata 2009-10-19 07:01:26
難道我不能用GNU C提供的套接字庫來實現它嗎?GNU C可用於各種平臺,我的代碼可以在所有這些平臺上工作。 – ata 2009-10-19 11:58:26