Linux下经常使用的C/C++开源Socket库【转】

转自:https://www.cnblogs.com/gccbuaa/p/7015599.html

1. Linux Socket Programming In C++ : http://tldp.org/LDP/LG/issue74/tougher.html

2. ACE: http://www.cs.wustl.edu/~schmidt/ACE.html

ACE採用ACE_OS适配层屏蔽各种不同的、复杂繁琐的操作系统API。

ACE是一个大型的中间件产品,代码20万行左右,过于宏大,一堆的设计模式,架构了一层又一层。它庞大、复杂。适合大型项目。开源、免费。不依赖第三方库。使用的时候,要依据情况。看你从哪一层来进行使用。支持跨平台。

ACE超重量级的网络通信开发框架。ACE自适配通信环境(AdaptiveCommunication Environment)是能够自由使用、开放源码的面向对象框架。在当中实现了很多用于并发通信软件的核心模式。

ACE提供了一组丰富的可复用C++包装外观(Wrapper Facade)和框架组件,可跨越多种平台完毕通用的通信软件任务,当中包含:事件多路分离和事件处理器分派、信号处理、服务初始化、进程间通信、共享内存管理、消息路由、分布式服务动态(重)配置、并发执行和同步,等等

3. C++ Sockets Library: http://www.alhem.net/Sockets/index.html

它是一个跨平台的Sockets库,实现包含TCP、UDP、ICMP、SCTP协议。已实现的应用协议包含有SMTP、HTTP(S)、Ajp。具有SOCKSclient实现以及匿名DNS。支持HTTP的GET/POST/PUT以及WebServer的框架。

它封装了sockets C API的C++类库。支持SSL, IPv6, tcp和udp sockets, sctp sockets, http协议, 高度可定制的错误处理。

4. Asio C++ Library: http://think-async.com/

它是一个基于Boost开发的异步IO库,封装了对Socket的经常使用操作。简化了基于Socket程序的开发。它开源、免费、支持跨平台。

5. libevent: http://libevent.org/

它是一个C语言写的网络库,主要支持的是类Linux 操作系统,最新的版本号加入了对Windows的IOCP的支持。因为IOCP是异步IO。与Linux下的POLL模型。EPOLL模型,还有freebsd的KQUEUE等这些同步模型在用法上全然不一致。所以用法也不一样,就好比ACE中的Reactor和Proactor模式一样。使用起来须要转变思路。

假设对性能没有特别的要求。那么使用libevent中的select模型来实现跨平台的操作,select模型能够横跨Windows,Linux,Unix。Solaris等系统。

Libevent是一个轻量级的开源高性能网络库,它的机制是採用事件触发,封装了以下三种事件的响应:IO事件,定时器事件,信号事件。

select模型来实现跨平台的操作,Windows环境下支持IOCP。Google的开源WEB浏览器Chromium在Mac和Linux版本号中。也使用了Libevent。足见该库的质量。

6. libev: http://software.schmorp.de/pkg/libev.html

它是一个C语言写的。仅仅支持Linux系统的库,曾经的时候仅仅封装了EPOLL模型.用法相似libevent,可是非常简洁,代码量是最少的一个库。也就几千行代码。显然这种代码跨平台肯定是无法支持的了,假设你仅仅须要在Linux以下执行。那用这个库也是能够的。

libev和libevent非常像,依照作者的介绍,能够作为libevent的替代者。能够提供更高的性能。

libev是一个高性能事件循环,所实现的功能就是一个强大的reactor。

7. SimpleSocket: http://home.kpn.nl/lcbokkers/simsock.htm

这个类库让编写基于Socket的客户/server程序更加容易。

8. simple-socket: http://sourceforge.net/projects/simple-socket/

An easy to use C++ socket andnetwork library, mainly for UNIX systems.

9. POCO: http://pocoproject.org/

POCO C++ Libraries提供一套C++的类库用以开发基于网络的可移植的应用程序,功能涉及线程、线程同步、文件系统訪问、流操作、共享库和类载入、套接字以及网络协议包含:HTTP、FTP、SMTP等;其本身还包含一个HTTPserver。提供XML的解析和SQL数据库的訪问接口。POCO库的模块化、高效的设计及实现使得POCO特别适合嵌入式开发。在嵌入式开发领域,因为C++既适合底层(设备I/O、中断处理等)和高层面向对象开发,越来越流行。

10. libcurl: http://curl.haxx.se/libcurl/

libcurl是免费的轻量级的client网络库。支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS,POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet, TFTP.支持SSL, HTTPPOST,HTTPPUT, FTP上传, HTTP form上传,代理,cookies, username与password认证。

假设你开发的是client。libcurl是一个不错的选择。

11. libiop: http://sourceforge.net/projects/libiop/

一个c语言开发的跨平台网络IO库。

功能特性:c/c++api, 底层支持epoll, select,poll等io模型。异步事件模型;任务池模型,跨平台线程接口。跨平台(Linux/windows)。日志服务。稳定。支持7*24小时无间断执行。自己主动处理异常状态;高并发与高速响应;API简洁,学习成本底。

注:以上内容整理自网络!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏.NET技术与企业级解决方案

Visual Studio 调试系列9 调试器提示和技巧

如果你在调试时,经常将鼠标悬停在数据提示上,就可能想固定变量的数据提示,方便自己随时查看。 即使在重新启动后,固定的变量也能保持不动。 要固定数据提示,请在鼠标...

9110
来自专栏明年我18

Linux red hat enterprise5下安装oracle

我对linux是绝对的菜鸟,但今天有份工作是给一台装在linux上的oracle服务器设置自动数据备份。这很可能是只做一次的工作,只做一次的东西,时间久了肯定会...

10320
来自专栏算法工程师之路

动态规划问题-LeetCode 5 (经典DP问题、LCS问题)

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

34510
来自专栏机器人课程与技术

ROS2编程基础课程--接口

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

9240
来自专栏.NET技术与企业级解决方案

C#开发BIMFACE系列9 服务端API之获取应用支持的文件类型

BIMFACE最核心能力之一是工程文件格式转换。无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息。开发者将告别原始文件解析烦恼,数据抽取全部...

7430
来自专栏分享/效率/工具/软件

Java关键字和保留字

个人博客:https://suveng.github.io/blog/​​​​​​​ 转载:http://cyw3.github.io/YalesonChan...

14030
来自专栏Jerry的SAP技术分享

css position relative and absolute布局

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

4920
来自专栏.NET技术与企业级解决方案

C#6.0 新增功能

C# 6.0 版本包含许多可提高开发人员工作效率的功能。 这些功能的总体效果是让你编写的代码更简洁、更具可读性。 该语法不像许多常见做法那样繁琐。 可以更轻松地...

8320
来自专栏算法工程师之路

动态规划问题-LeetCode 64、135(58同城笔试题)

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

10120
来自专栏网络小说作家的编程技术沉思录

如何写出一个性能优化的单例模式

单例模型是面试当中最常见的一种设计模式,它是一种对象创建模式,用于产生一个对象的具体实例,可以确保系统中一个类只产生一个实例。

10920

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励