[推荐] 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.0.1 发布 [问题点数:100分,结帖人DuMiYue]

Bbs2
本版专家分:187
结帖率 96.2%
Bbs1
本版专家分:85
Bbs1
本版专家分:10
Bbs1
本版专家分:11
Bbs1
本版专家分:15
Bbs9
本版专家分:87213
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs2
本版专家分:187
Bbs3
本版专家分:592
Bbs1
本版专家分:10
Bbs2
本版专家分:380
Bbs1
本版专家分:20
Bbs1
本版专家分:55
Bbs9
本版专家分:87213
Blank
状元 2017年 总版技术专家分年内排行榜第一
Blank
榜眼 2014年 总版技术专家分年内排行榜第二
Blank
探花 2013年 总版技术专家分年内排行榜第三
Blank
进士 2018年总版新获得的技术专家分排名前十
2012年 总版技术专家分年内排行榜第七
Bbs4
本版专家分:1131
Bbs1
本版专家分:2
Bbs12
本版专家分:361009
版主
Blank
名人 2013年 荣获名人称号
Blank
探花 2011年 总版技术专家分年内排行榜第三
2010年 总版技术专家分年内排行榜第三
Blank
进士 2012年 总版技术专家分年内排行榜第五
Blank
金牌 2012年1月 总版技术专家分月排行榜第一
Bbs2
本版专家分:393
Bbs2
本版专家分:187
Bbs1
本版专家分:0
Bbs1
本版专家分:24
Bbs2
本版专家分:348
Bbs1
本版专家分:0
Bbs2
本版专家分:187
Bbs2
本版专家分:187
高性能跨平台网络通信框架 HP-Socket v5.4.4
[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>][img=<em>http</em>://img.bbs.csdn.net/upload/201712/14/1513251736_538356.png][/img][/url]rnrn [b]项目主页 :[/b] [url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn [b]开发文档 :[/b] [url=<em>http</em>://www.docin.com/p-2154702652.html]<em>http</em>://www.docin.com/p-2154702652.html[/url]rn [b]下载地址 :[/b] [url=<em>http</em>s://github.com/ldcsaa/HP-Socket]<em>http</em>s://github.com/ldcsaa/HP-Socket[/url]rn [b]QQ Group :[/b] [url=<em>http</em>://shang.qq.com/wpa/qunwpa?idkey=5056a5463f52cac937e0da8a0c313993073294a3dafaeec3724735a030d4e294]75375912[/url], [url=<em>http</em>://shang.qq.com/wpa/qunwpa?idkey=f5273069775c0c98e43bd4960702b5a9b4812b000771f5a1d3f34c544f3b6d6c]44636872[/url]rnrn HP-Socket提供以下几类组件,详细内容请参考《[url=<em>http</em>://www.docin.com/p-2154702652.html]HP-Socket网络<em>通信框架</em>开发指南[/url]》:rnrn [b]Server:[/b]基于IOCP / EPOLL通信模型,并结合缓存池、私有堆等技术实现高效内存管理,支持超大规模、高并发通信场景。rn [b]Agent:[/b]Agent组件实质上是Multi-Client组件,与Server组件采用相同的技术架构。一个Agent组件对象可同时建立和高效处理大规模Socket连接。rn [b]Client:[/b]基于Event Select / POLL通信模型,每个组件对象创建一个通信线程并管理一个Socket连接,适用于小规模客户端场景。rnrn[size=24px][b]v5.4.4 更新[/b][/size]rnrn[size=16px][b] 一、TCP 组件更新[/b][/size]rn 1. IAgent 组件支持在连接服务器时指定本地IP地址和(或)本地端口rn[size=16px][b] 二、其他更新[/b][/size]rn 1. 代码优化rn 2. <em>http</em>-parser 解析器升级到 2.9.0 版本rn 3. OpenSSL 版本升级到 1.1.0j 版本rn 4. 提供 _UDP_DISABLED 预编译宏用于移除 UDP 组件rnrn[size=24px][b]v5.4.3 更新[/b][/size]rnrn[size=16px][b] 一、HTTP 组件更新[/b][/size]rn 1. HTTP 组件可以手工启动 HTTP 通信,从而可以对 HTTP 通信执行 SOCKS 代理服务器设置等前置操作rn 2. HTTP 组件(Server/Agent/Client)增加以下接口方法支持手工启动 HTTP 通信rn[code=text]1) StartHttp():手工启动 HTTP 通信,当通信组件设置为非自动启动时,需要调用本方法启动 HTTP 通信rn2) SetHttpAutoStart():设置 HTTP 通信启动方式(默认:TRUE,自动启动)rn3) IsHttpAutoStart():获取 HTTP 通信启动方式[/code]rn[size=16px][b] 二、其他更新[/b][/size]rn 1. Bug 修复:UDP Server 在高并发场景下可能重复触发 OnAccept 事件rnrn[size=24px][b]v5.4.2 更新[/b][/size]rnrn[size=16px][b] 一、SSL 组件更新[/b][/size]rn 1. SSL 组件可以手工启动 SSL 握手,从而可以对 SSL/Https 通信执行代理服务器设置等前置操作rn 2. SSL 组件(Server/Agent/Client)增加以下接口方法支持手工启动 SSL 握手rn[code=text]1) StartSSLHandShake():手工启动 SSL 握手,当通信组件设置为非自动握手时,需要调用本方法启动 SSL 握手rn2) SetSSLAutoHandShake():设置通信组件握手方式(默认:TRUE,自动握手)rn3) IsSSLAutoHandShake():获取通信组件握手方式[/code]rn[size=16px][b] 二、其他更新[/b][/size]rn 1. 所有可能导致 Socket 关闭的组件接口方法都在 Socket 通信线程中异步触发 OnClose 事件rn 2. Server 与 Agent 组件的 DIRECT 发送策略也支持通过 GetPendingDataLength() 方法实现流控rn 3. Server 与 Agent 组件的 Disconnect() 方法不再支持‘非强制断开’(仍然保留bForce 参数),调用时都会强制断开rn 4. OnSend 事件支持 三种同步策略rn[code=text]1) OSSP_NONE:不同步(默认)rn2) OSSP_CLOSE:同步 OnClosern3) OSSP_RECEIVE:同步 OnClose 和 OnReceive(只用于 TCP 组件)[/code] 5. OpenSSL 版本升级到 1.1.0i 版本rnrn[size=24px][b]v5.4.1 更新[/b][/size]rnrn[size=16px][b] 一、加入线程池公共组件[/b][/size]rn 1. 加入 IHPThreadPool 线程池公共组件rn 2. IHPThreadPool 主要方法rn[code=text]1) Start:启动线程池rn2) Stop:关闭线程池rn3) Submit:提交任务rn4) AdjustThreadCount:调整线程池大小[/code]rn[size=16px][b] 二、接口更新[/b][/size]rn 1. IAgent 接口的 Connect() 方法增加参数 usLocalPort,连接时可绑定本地端口rn 2. IClient 接口的 Start() 方法增加参数 usLocalPort,连接时可绑定本地端口rn 3. IClient/IAgent/IServer 接口增加方法 IsConnected(),检测是否有效连接rnrn[size=16px][b] 三、其它更新[/b][/size]rn 1. 修复已知问题rn 2. 性能优化rnrn[size=24px][b]v5.3.2 更新[/b][/size]rnrn[size=16px][b] 一、Linux版本更新[/b][/size]rn 1. Android NDK 支持:所有组件源码均可使用Android NDK编译,在Android平台上运行rn 2. Bug修复:5.3.1版本中用dlopen()动态加载共享库失败rn 3. 增加 _ICONV_DISABLED 预编译宏用于关闭 iconv 库功能rn 4. 增加 _ZLIB_DISABLED 预编译宏用于关闭 zlib 库功能rn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069576_297837.jpg][/img]rnrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069680_240026.jpg][/img]rnrn[size=16px][b] 二、Windows版本更新[/b][/size]rn 1. 修复 C# SDK 关于 SSL 初始化失败 Bugrn 2. 增加 _ZLIB_DISABLED 预编译宏用于关闭 zlib 库功能rnrn[size=16px][b] 三、其它更新[/b][/size]rn 1. <em>http</em>-parser 解析器升级到 2.8.1 版本rn 2. OpenSSL 版本升级到 1.1.0hrn 3. jemalloc 版本升级到 5.1.0 版本rnrn[size=24px][b]v5.2.1 更新[/b][/size]rnrn[size=16px][b] 一、<em>发布</em>包调整[/b][/size]rn 1. 版本号修订:Windows 和 Linux 发行版使用统一版本号rn 2. <em>发布</em>文件不再区分非 SSL DLL 和 SSL DLL,统一为 HPSocket DLL 和 HPSocket4C DLLrn 3. <em>发布</em>文件默认包含 SSL 和 HTTP 组件rn 4. 如果想去除 SSL 或 HTTP 组件,可以分别定义 _SSL_DISABLED 或 _HTTP_DISABLED 宏重新编rnrn[size=16px][b] 二、新增 Linux SSL 组件[/b][/size]rn 1. [b]Server:[/b] SSL Server, SSL Pull Server, SSL Pack Serverrn 2. [b]Agent:[/b] SSL Agent, SSL Pull Agent, SSL Pack Agentrn 3. [b]Client:[/b] SSL Client, SSL Pull Client, SSL Pack Clientrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069791_927215.jpg][/img]rnrn[size=16px][b] 三、新增 Linux HTTP 组件[/b][/size]rn 1. [b]Server:[/b] HTTP Server, HTTPS Serverrn 2. [b]Agent:[/b] HTTP Agent, HTTP Agentrn 3. [b]Client:[/b] HTTP Client, HTTP Client, HTTP Sync Client, HTTPS Sync Clientrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069809_634854.jpg][/img]rnrn[size=16px][b] 四、新增 Linux Demo[/b][/size]rn 1. [b]testecho-ssl:[/b] (SRC) SSL simple test echo server/agent/clientrn 2. [b]testecho-ssl-pfm:[/b] (SO) SSL performance test echo server/agent/clientrn 3. [b]testecho-ssl-pull:[/b] (SO) SSL pull echo server/agent/clientrn 4. [b]testecho-ssl-pack:[/b] (4C SO) SSL pack echo server/agent/clientrn 5. [b]testecho-<em>http</em>:[/b] (SRC) HTTP simple test echo server/agent/client/sync-clientrn 6. [b]testecho-<em>http</em>-4c:[/b] (4C SO) HTTP simple test echo server/agent/client/sync-client
高性能网络通信框架 HP-Socket v5.5.2,支持可靠 UDP
项目主页 : <em>http</em>://www.oschina.net/p/<em>hp-socket</em> 开发文档 : <em>http</em>s://www.docin.com/p-2212773943.html 下载地址 : <em>http</em>s://github.com/ldcsaa/HP-Socket QQ Group: 75375912, 44636872 本次更新对 UDP 系列组件作了大量优化,新增了可靠 UDP 组件! ...
高性能跨平台网络通信框架 HP-Socket v5.4.1
[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>][img=<em>http</em>://img.bbs.csdn.net/upload/201712/14/1513251736_538356.png][/img][/url]rnrn [b]项目主页 :[/b] [url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn [b]开发文档 :[/b] [url=<em>http</em>://www.docin.com/p-2129383071.html]<em>http</em>://www.docin.com/p-2129383071.html[/url]rn [b]下载地址 :[/b] [url=<em>http</em>s://github.com/ldcsaa/HP-Socket]<em>http</em>s://github.com/ldcsaa/HP-Socket[/url]rn [b]QQ Group :[/b] [url=<em>http</em>://shang.qq.com/wpa/qunwpa?idkey=5056a5463f52cac937e0da8a0c313993073294a3dafaeec3724735a030d4e294]75375912[/url], [url=<em>http</em>://shang.qq.com/wpa/qunwpa?idkey=f5273069775c0c98e43bd4960702b5a9b4812b000771f5a1d3f34c544f3b6d6c]44636872[/url]rnrn HP-Socket提供以下几类组件,详细内容请参考《[url=<em>http</em>://www.docin.com/p-2129383071.html]HP-Socket网络<em>通信框架</em>开发指南[/url]》:rnrn [b]Server:[/b]基于IOCP / EPOLL通信模型,并结合缓存池、私有堆等技术实现高效内存管理,支持超大规模、高并发通信场景。rn [b]Agent:[/b]Agent组件实质上是Multi-Client组件,与Server组件采用相同的技术架构。一个Agent组件对象可同时建立和高效处理大规模Socket连接。rn [b]Client:[/b]基于Event Select / POLL通信模型,每个组件对象创建一个通信线程并管理一个Socket连接,适用于小规模客户端场景。rnrn[size=24px][b]v5.4.1 更新[/b][/size]rnrn[size=16px][b] 一、加入线程池公共组件[/b][/size]rn 1. 加入 IHPThreadPool 线程池公共组件rn 2. IHPThreadPool 主要方法rn[code=text]1) Start:启动线程池rn2) Stop:关闭线程池rn3) Submit:提交任务rn4) AdjustThreadCount:调整线程池大小[/code]rn[size=16px][b] 二、接口更新[/b][/size]rn 1. IAgent 接口的 Connect() 方法增加参数 usLocalPort,连接时可绑定本地端口rn 2. IClient 接口的 Start() 方法增加参数 usLocalPort,连接时可绑定本地端口rn 3. IClient/IAgent/IServer 接口增加方法 IsConnected(),检测是否有效连接rnrn[size=16px][b] 三、其它更新[/b][/size]rn 1. 修复已知问题rn 2. 性能优化rnrn[size=24px][b]v5.3.2 更新[/b][/size]rnrn[size=16px][b] 一、Linux版本更新[/b][/size]rn 1. Android NDK 支持:所有组件源码均可使用Android NDK编译,在Android平台上运行rn 2. Bug修复:5.3.1版本中用dlopen()动态加载共享库失败rn 3. 增加 _ICONV_DISABLED 预编译宏用于关闭 iconv 库功能rn 4. 增加 _ZLIB_DISABLED 预编译宏用于关闭 zlib 库功能rn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069576_297837.jpg][/img]rnrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069680_240026.jpg][/img]rnrn[size=16px][b] 二、Windows版本更新[/b][/size]rn 1. 修复 C# SDK 关于 SSL 初始化失败 Bugrn 2. 增加 _ZLIB_DISABLED 预编译宏用于关闭 zlib 库功能rnrn[size=16px][b] 三、其它更新[/b][/size]rn 1. <em>http</em>-parser 解析器升级到 2.8.1 版本rn 2. OpenSSL 版本升级到 1.1.0hrn 3. jemalloc 版本升级到 5.1.0 版本rnrn[size=24px][b]v5.2.1 更新[/b][/size]rnrn[size=16px][b] 一、<em>发布</em>包调整[/b][/size]rn 1. 版本号修订:Windows 和 Linux 发行版使用统一版本号rn 2. <em>发布</em>文件不再区分非 SSL DLL 和 SSL DLL,统一为 HPSocket DLL 和 HPSocket4C DLLrn 3. <em>发布</em>文件默认包含 SSL 和 HTTP 组件rn 4. 如果想去除 SSL 或 HTTP 组件,可以分别定义 _SSL_DISABLED 或 _HTTP_DISABLED 宏重新编rnrn[size=16px][b] 二、新增 Linux SSL 组件[/b][/size]rn 1. [b]Server:[/b] SSL Server, SSL Pull Server, SSL Pack Serverrn 2. [b]Agent:[/b] SSL Agent, SSL Pull Agent, SSL Pack Agentrn 3. [b]Client:[/b] SSL Client, SSL Pull Client, SSL Pack Clientrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069791_927215.jpg][/img]rnrn[size=16px][b] 三、新增 Linux HTTP 组件[/b][/size]rn 1. [b]Server:[/b] HTTP Server, HTTPS Serverrn 2. [b]Agent:[/b] HTTP Agent, HTTP Agentrn 3. [b]Client:[/b] HTTP Client, HTTP Client, HTTP Sync Client, HTTPS Sync Clientrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069809_634854.jpg][/img]rnrn[size=16px][b] 四、新增 Linux Demo[/b][/size]rn 1. [b]testecho-ssl:[/b] (SRC) SSL simple test echo server/agent/clientrn 2. [b]testecho-ssl-pfm:[/b] (SO) SSL performance test echo server/agent/clientrn 3. [b]testecho-ssl-pull:[/b] (SO) SSL pull echo server/agent/clientrn 4. [b]testecho-ssl-pack:[/b] (4C SO) SSL pack echo server/agent/clientrn 5. [b]testecho-<em>http</em>:[/b] (SRC) HTTP simple test echo server/agent/client/sync-clientrn 6. [b]testecho-<em>http</em>-4c:[/b] (4C SO) HTTP simple test echo server/agent/client/sync-client
5.4节呈献:HP-Socket v5.3.1 发布 — 支持 Android NDK
项目主页 : <em>http</em>://www.oschina.net/p/<em>hp-socket</em> 开发文档 : <em>http</em>://www.docin.com/p-2079016612.html 下载地址 : <em>http</em>s://github.com/ldcsaa/HP-Socket QQ Group: 75375912, 44636872 HP-Socket提供以下几类组件,详细内容请参考《HP-Socket网...
高性能跨平台(Win&Linux;)网络通信框架 HP-Socket
<em>高性能</em>跨平台(Win&Linux;)网络<em>通信框架</em> HP-Socket 没有最好只有更好, 非源代码,太大无法上传,有网址可自行下载完整包 。 HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、客户端组件和Agent组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。 为了让使用者能方便快速地学习和使用 HP-Socket ,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前支持 Windows 和 Linux 平台。 HP-Socket 的设计充分注重功能、通用型、易用性与伸缩性; HP-Socket 项目主页:<em>http</em>://www.oschina.net/p/<em>hp-socket</em>
高性能跨平台网络通信框架 HP-Socket v5.4.2
[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>][img=<em>http</em>://img.bbs.csdn.net/upload/201712/14/1513251736_538356.png][/img][/url]rnrn [b]项目主页 :[/b] [url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn [b]开发文档 :[/b] [url=<em>http</em>://www.docin.com/p-2137713732.html]<em>http</em>://www.docin.com/p-2137713732.html[/url]rn [b]下载地址 :[/b] [url=<em>http</em>s://github.com/ldcsaa/HP-Socket]<em>http</em>s://github.com/ldcsaa/HP-Socket[/url]rn [b]QQ Group :[/b] [url=<em>http</em>://shang.qq.com/wpa/qunwpa?idkey=5056a5463f52cac937e0da8a0c313993073294a3dafaeec3724735a030d4e294]75375912[/url], [url=<em>http</em>://shang.qq.com/wpa/qunwpa?idkey=f5273069775c0c98e43bd4960702b5a9b4812b000771f5a1d3f34c544f3b6d6c]44636872[/url]rnrn HP-Socket提供以下几类组件,详细内容请参考《[url=<em>http</em>://www.docin.com/p-2137713732.html]HP-Socket网络<em>通信框架</em>开发指南[/url]》:rnrn [b]Server:[/b]基于IOCP / EPOLL通信模型,并结合缓存池、私有堆等技术实现高效内存管理,支持超大规模、高并发通信场景。rn [b]Agent:[/b]Agent组件实质上是Multi-Client组件,与Server组件采用相同的技术架构。一个Agent组件对象可同时建立和高效处理大规模Socket连接。rn [b]Client:[/b]基于Event Select / POLL通信模型,每个组件对象创建一个通信线程并管理一个Socket连接,适用于小规模客户端场景。rnrn[size=24px][b]v5.4.2 更新[/b][/size]rnrn[size=16px][b] 一、SSL 组件更新[/b][/size]rn 1. SSL 组件可以手工启动 SSL 握手,从而可以对 SSL/Https 通信执行代理服务器设置等前置操作rn 2. SSL 组件(Server/Agent/Client)增加以下接口方法支持手工启动 SSL 握手rn[code=text]1) StartSSLHandShake():手工启动 SSL 握手,当通信组件设置为非自动握手时,需要调用本方法启动 SSL 握手rn2) SetSSLAutoHandShake():设置通信组件握手方式(默认:TRUE,自动握手)rn3) IsSSLAutoHandShake():获取通信组件握手方式[/code]rn[size=16px][b] 二、其他更新[/b][/size]rn 1. 所有可能导致 Socket 关闭的组件接口方法都在 Socket 通信线程中异步触发 OnClose 事件rn 2. Server 与 Agent 组件的 DIRECT 发送策略也支持通过 GetPendingDataLength() 方法实现流控rn 3. Server 与 Agent 组件的 Disconnect() 方法不再支持‘非强制断开’(仍然保留bForce 参数),调用时都会强制断开rn 4. OnSend 事件支持 三种同步策略rn[code=text]1) OSSP_NONE:不同步(默认)rn2) OSSP_CLOSE:同步 OnClosern3) OSSP_RECEIVE:同步 OnClose 和 OnReceive(只用于 TCP 组件)[/code] 5. OpenSSL 版本升级到 1.1.0i 版本rnrn[size=24px][b]v5.4.1 更新[/b][/size]rnrn[size=16px][b] 一、加入线程池公共组件[/b][/size]rn 1. 加入 IHPThreadPool 线程池公共组件rn 2. IHPThreadPool 主要方法rn[code=text]1) Start:启动线程池rn2) Stop:关闭线程池rn3) Submit:提交任务rn4) AdjustThreadCount:调整线程池大小[/code]rn[size=16px][b] 二、接口更新[/b][/size]rn 1. IAgent 接口的 Connect() 方法增加参数 usLocalPort,连接时可绑定本地端口rn 2. IClient 接口的 Start() 方法增加参数 usLocalPort,连接时可绑定本地端口rn 3. IClient/IAgent/IServer 接口增加方法 IsConnected(),检测是否有效连接rnrn[size=16px][b] 三、其它更新[/b][/size]rn 1. 修复已知问题rn 2. 性能优化rnrn[size=24px][b]v5.3.2 更新[/b][/size]rnrn[size=16px][b] 一、Linux版本更新[/b][/size]rn 1. Android NDK 支持:所有组件源码均可使用Android NDK编译,在Android平台上运行rn 2. Bug修复:5.3.1版本中用dlopen()动态加载共享库失败rn 3. 增加 _ICONV_DISABLED 预编译宏用于关闭 iconv 库功能rn 4. 增加 _ZLIB_DISABLED 预编译宏用于关闭 zlib 库功能rn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069576_297837.jpg][/img]rnrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069680_240026.jpg][/img]rnrn[size=16px][b] 二、Windows版本更新[/b][/size]rn 1. 修复 C# SDK 关于 SSL 初始化失败 Bugrn 2. 增加 _ZLIB_DISABLED 预编译宏用于关闭 zlib 库功能rnrn[size=16px][b] 三、其它更新[/b][/size]rn 1. <em>http</em>-parser 解析器升级到 2.8.1 版本rn 2. OpenSSL 版本升级到 1.1.0hrn 3. jemalloc 版本升级到 5.1.0 版本rnrn[size=24px][b]v5.2.1 更新[/b][/size]rnrn[size=16px][b] 一、<em>发布</em>包调整[/b][/size]rn 1. 版本号修订:Windows 和 Linux 发行版使用统一版本号rn 2. <em>发布</em>文件不再区分非 SSL DLL 和 SSL DLL,统一为 HPSocket DLL 和 HPSocket4C DLLrn 3. <em>发布</em>文件默认包含 SSL 和 HTTP 组件rn 4. 如果想去除 SSL 或 HTTP 组件,可以分别定义 _SSL_DISABLED 或 _HTTP_DISABLED 宏重新编rnrn[size=16px][b] 二、新增 Linux SSL 组件[/b][/size]rn 1. [b]Server:[/b] SSL Server, SSL Pull Server, SSL Pack Serverrn 2. [b]Agent:[/b] SSL Agent, SSL Pull Agent, SSL Pack Agentrn 3. [b]Client:[/b] SSL Client, SSL Pull Client, SSL Pack Clientrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069791_927215.jpg][/img]rnrn[size=16px][b] 三、新增 Linux HTTP 组件[/b][/size]rn 1. [b]Server:[/b] HTTP Server, HTTPS Serverrn 2. [b]Agent:[/b] HTTP Agent, HTTP Agentrn 3. [b]Client:[/b] HTTP Client, HTTP Client, HTTP Sync Client, HTTPS Sync Clientrn [img=<em>http</em>s://img-bbs.csdn.net/upload/201806/27/1530069809_634854.jpg][/img]rnrn[size=16px][b] 四、新增 Linux Demo[/b][/size]rn 1. [b]testecho-ssl:[/b] (SRC) SSL simple test echo server/agent/clientrn 2. [b]testecho-ssl-pfm:[/b] (SO) SSL performance test echo server/agent/clientrn 3. [b]testecho-ssl-pull:[/b] (SO) SSL pull echo server/agent/clientrn 4. [b]testecho-ssl-pack:[/b] (4C SO) SSL pack echo server/agent/clientrn 5. [b]testecho-<em>http</em>:[/b] (SRC) HTTP simple test echo server/agent/client/sync-clientrn 6. [b]testecho-<em>http</em>-4c:[/b] (4C SO) HTTP simple test echo server/agent/client/sync-client
网络通信框架 HP-Socket v5.5.1,支持可靠 UDP
开发四年只会写业务代码,分布式高并发都不会还做程序员? &gt;&gt;&gt; 项目主页:<em>http</em>...
HP-Socket网络通信框架开发指南
经典socket开发框架
JAVA TCP和UDP Socket通信框架
一个很好用的JAVA基于TCP和UDP的Socket<em>通信框架</em>,包括客户端和服务器,以及相应的回调方法
高性能 Socket 组件 HP-Socket v3.1.3 正式发布
[url=<em>http</em>://www.jessma.org][img=<em>http</em>s://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rn rn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]通用性[/size][/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b][size=14px]可用性[/size][/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b][size=14px]<em>高性能</em>[/size][/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   [b]客户端:[/b]在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn   [b]服务端:[/b]采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn rn[b][size=14px]伸缩性[/size][/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rnrn[b][i]> 升级说明:[/i][/b]rn-----------------rn 1、使用 HP-Socket v3.1.2 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.3rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]rn方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocketrn[/code] 4、HPSocket4C.dll 动态链接库发行版本 [code=text]rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn[/code]rn[b][i]> 全面启用 Buffer Pool 缓存机制:[/i][/b]rn-----------------rn 1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn 2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn 3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn 6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.0.2 更新 ***[/color][/size][/b]rn rn[b][i]> 把 HP-Socket 编译为动态链接库:[/i][/b]rn -----------------rn 1、应用程序可以通过导入源代码或动态链接库方式使用 HP-Socketrn 2、动态链接库使用方法rn[code=text]rn方法一:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象rn(2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象rn rn方法二:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象rn[/code] 3、动态链接库发行版本 [code=text]rn (1) Bin/x86/HPSocket.dll - (32位/MBCS/Release)rn (2) Bin/x86/HPSocket_D.dll - (32位/MBCS/DeBug)rn (3) Bin/x86/HPSocket_U.dll - (32位/UNICODE/Release)rn (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)rn (5) Bin/x64/HPSocket.dll - (64位/MBCS/Release)rn (6) Bin/x64/HPSocket_D.dll - (64位/MBCS/DeBug)rn (7) Bin/x64/HPSocket_U.dll - (64位/UNICODE/Release)rn (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)rn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.0.1 更新 ***[/color][/size][/b]rn rn[b][i]> 新增 UDP 通信组件:[/i][/b]rn-----------------rn 1、新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn 2、服务端组件 CUdpServer 采用 IOCP 通信模型rn 3、客户端组件 CUdpClient 采用 Event Select 通信模型rn 4、UDP 通信组件的接口与原 TCP 通信组件一致,简单实用rn 5、UDP 通信组件内置通信线路自动监测机制rn 6、新增 UDP 通信组件示例工程 TestEcho-UDPrn rn[b][i]> 代码重构与优化:[/i][/b]rn-----------------rn 1、规范所有接口、类以及代码文件的命名rn 2、重构和优化了大量组件代码rn 3、服务端组件加入读写锁机制,有效平衡处理性能与安全性rn 4、服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v2.2.3 更新 ***[/color][/size][/b]rn rn[b][i]> 连接 ID 的数据类型改为‘CONNID’:[/i][/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrn rn[b][i]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/i][/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v2.2.2 更新 ***[/color][/size][/b]rn rn[b][i]> 优化心跳检测相关功能:[/i][/b]rn-----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v2.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> PULL 模型支持:[/i][/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rn rn[b][i]> Server:[/i][/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrn rn[b][i]> Client:[/i][/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket
HP-Socket网络通信框架开发指南5.0版
HP-Socket网络<em>通信框架</em>开发指南5.0版.详细的说明。。。
HP-Socket网络通信框架开发指南.zip
HP-Socket 是一套通用的<em>高性能</em> TCP/UDP/HTTP <em>通信框架</em>,包含服务端组件、 客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通 信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。 HP-Socket 对通信层完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。 为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思 想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、PACK 模型示例、性能测试示例以及其它编程语言示例)。
高性能 Socket 组件 HP-Socket v3.2.1 正式发布
[url=<em>http</em>://www.jessma.org][img=<em>http</em>s://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> TCP/UDP Socket 组件,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握组件的设计思想和使用方法,特此精心制作了大量 Demo 示例,包括 PUSH 模型示例、PULL模型示例和性能测试示例等。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rn rn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]通用性[/size][/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作。rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b][size=14px]可用性[/size][/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b][size=14px]<em>高性能</em>[/size][/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   [b]客户端:[/b]在单独线程中实现 Socket 通信交互,这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。每个组件对象管理一个 Socket 连接。rn   [b]服务端:[/b]采用高效的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn   [b]Agent:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象管理多个 Socket 连接,与服务端采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]伸缩性[/size][/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code] 5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crn[img=<em>http</em>s://img-bbs.csdn.net/upload/201406/05/1401936622_343162.jpg][/img]rn 6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例:HttpProxyrn[img=<em>http</em>s://img-bbs.csdn.net/upload/201406/05/1401936640_775605.jpg][/img]rnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)rn 3、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 4、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] 5、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code] 6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn[img=<em>http</em>s://img-bbs.csdn.net/upload/201406/05/1401936663_823244.jpg][/img]rnrn[b][i]> 优化数据收发策略:[/i][/b]rn-----------------rn 1、Server 和 Agent 组件提供以下三种数据发送策略:rn[code=text]rn1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率rn2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出rn3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合rn[/code] 2、Server 和 Agent 组件提供以下两种数据接收策略:rn[code=text]rn1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件rn2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件 rn[/code][b][i]> 其它更新:[/i][/b]rn-----------------rn 1、IServer 的 GetClientAddress() 方法改名为 GetRemoteAddress()rn 2、IClient 的 Send() 方法删除 “CONNID dwConnID” 参数rn 3、IClient/IServer/IAgent 的 Send() 方法增加发送数据缓冲区指针偏移量参数 “int iOffset”rn 4、增加 EnSendPolicy 枚举类型,IServer/IAgent 增加发送模式设置方法 SetSendPolicy()rn 5、增加 EnRecvPolicy 枚举类型,IServer/IAgent 增加接收模式设置方法 SetRecvPolicy()rn 6、IServer/IAgent 增加方法:BOOL GetAllConnectionIDs(),获取所有连接的 CONNIDrn 7、IUdpServer 增加方法:SetPostReceiveCount(),设置 Receive 预投递数量rn 8、EnServerError / EnClientError 枚举类型合并为 EnSocketErrorrn 9、EnSocketError / EnHandleResult / EnFetchResult 枚举类型从原所在类中移到外部rn 10、IClient/IServer/IAgent 增加方法:BOOL GetPendingDataLength(),获取连接中未发出数据的长度rn 11、HPSocket4C.dll 增加方法 SendPart(),支持指定缓冲区指针偏移量rn 12、增加 HPSocket for C# SDK(由 int 2e 提供)rn 13、增加 HPSocket 易语言支持库(由 Yecate 提供)rn 14、公共代码包 vc-common-src 更新为 v2.3.5(参考:vc-common-src v2.3.5 的 Change Log)rn rn[b][i]> 升级说明:[/i][/b]rn-----------------rn 1、HP-Socket v3.2.1 在功能上兼容 HP-Socket v3.1.3 及以前版本rn 2、接口有变化,需要根据提示修改程序代码;注意:现有程序不能直接替换 v3.1.3 的 DLLrn 3、EnServerError / EnClientError 枚举类型合并为 EnSocketError,注意一些枚举值发生了变化rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn
高性能 Socket 组件 HP-Socket v3.2.1-RC1 发布
[url=<em>http</em>://www.jessma.org][img=<em>http</em>s://img-bbs.csdn.net/upload/201403/29/1396091144_455532.png][/img][/url]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> TCP/UDP Socket 组件,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E、Java 等编程语言开发接口。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握组件的设计思想和使用方法,特此精心制作了大量 Demo 示例,包括 PUSH 模型示例、PULL模型示例和性能测试示例等。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。[/color]rn rn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn[b] [size=14px]通用性[/size][/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b][size=14px]可用性[/size][/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b][size=14px]<em>高性能</em>[/size][/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   [b]客户端:[/b]在单独线程中实现 Socket 通信交互,这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。每个组件对象管理一个 Socket 连接。rn   [b]服务端:[/b]采用高效的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn   [b]Agent:[/b]对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象管理多个 Socket 连接,与服务端采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。rn rn[b][size=14px]伸缩性[/size][/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.2.1 更新 ***[/color][/size][/b]rn[color=#FF0000][i] (注:当前为 RC1 版)[/i][/color]rn[b][i]> 增加 TcpAgent / TcpPullAgent 通信组件:[/i][/b]rn-----------------rn 1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接rn 2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景rn 3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件rn 4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:rn[code=c]rn/* 1) 通知接口方法:*/rnOnPrepareConnect(CONNID dwConnID, SOCKET socket)rnOnConnect(CONNID dwConnID)rnOnSend(CONNID dwConnID, const BYTE* pData, int iLength)rnOnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)rnOnReceive(CONNID dwConnID, int iLength) //(Pull 模型)rnOnClose(CONNID dwConnID)rnOnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)rnOnAgentShutdown()rnrn/* 2) 主要操作方法:*/rnStart(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)rnStop()rnConnect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)rnSend(CONNID dwConnID, const BYTE* pBuffer, int iLength)rnDisconnect(CONNID dwConnID, BOOL bForce = TRUE)rnFetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)rn[/code]rn5、增加 TcpAgent / TcpPullAgent 使用示例:rn * Agent-PFMrn * Agent-Pullrn * Agent-4Crnrn[b][i]> 增加 HPSocket for Java SDK:[/i][/b]rn-----------------rn 1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)rn 2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下某些回调函数不能正常触发)rn 3、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)rn 4、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicodern 5、HPSocket for Java SDK 提供以下通信组件:rn[code=text]rn1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型rn2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型rn3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型rn4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型rn5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型rn[/code] rn 6、HPSocket4J 的使用方法(以 TcpAgent 为例):rn[code=c]rn/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */rnrn/* 1: 创建通信组件对象 */rnTcpAgent agent = TcpAgent.create(Mode.PUSH);rnrn/* 2: 设置回调函数对象 */rn// (可选)rnagent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());rn// (可选)rnagent.setCallBackOnConnect(new OnConnectImpl());rn// (必须)PUSH 模型需要设置 OnReceive 回调函数对象rnagent.setCallBackOnReceive(new OnReceiveImpl());rn// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象rn// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());rn// (可选)rnagent.setCallBackOnSend(new OnSendImpl());rn// (必须)rnagent.setCallBackOnClose(new OnCloseImpl());rn// (必须)rnagent.setCallBackOnError(new OnErrorImpl());rn// (可选)rnagent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());rnrn/* 3:启动通信组件 */rnagent.start("127.0.0.1", false);rnrn/* 4:连接服务器 */rnagent.connect("localhost", (short)5555, pdwConnID);rnrn/* 5:处理通信数据 */rn// 响应 OnReceive / OnPullReceive 事件接收数据rn// 使用 agent.send(dwConnID, data, data.length) 发送数据rnrn/* 6:关闭通信组件 */rnagent.stop();rnrn/* 7:销毁通信组件 */rnTcpAgent.destroy(agent);rn[/code]rn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、IServer 的 GetClientAddress() 方法改名为 GetRemoteAddress()rn 2、EnServerError / EnClientError 枚举类型合并为 EnSocketErrorrn 3、EnSocketError / EnHandleResult / EnFetchResult 枚举类型从原所在类中移到外部rn 4、公共代码包 vc-common-src 更新为 v2.3.3(参考:vc-common-src v2.3.3 的 Change Log)rn 5、增加 HPSocket for C# SDK(由 int 2e 提供)rn 6、代码整理优化rn rn[b][i]> 升级说明:[/i][/b]rn-----------------rn1、HP-Socket v3.2.1 在功能上兼容 HP-Socket v3.1.3 及以前版本rn2、由于代码作了一些重构,需要根据提示修改程序代码rn3、EnServerError / EnClientError 枚举类型合并为 EnSocketError,注意一些枚举值发生了变化rn4、不需要使用 TcpAgent / TcpPullAgent 的用户可以暂不更新rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.3 更新 ***[/color][/size][/b]rn rn[b][i]> 增加其它语言 Demo:[/i][/b]rn-----------------rn 1、C#rn 2、Delphirn 3、E 语言rnrn[b][i]> Bug Fix:[/i][/b]rn-----------------rn 1、修复 IP 地址判断错误 Bugrn 1) 客户端组件连接服务器时,如果服务器 IP 地址满位(12个数字:‘AAA.BBB.CCC.DDD’)则被错误地判断为域名rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn 2、 修复域名或主机名的 IP 地址解析错误 Bugrn 1) 客户端组件通过域名或主机名连接服务器时,可能会解析到错误的 IP 地址rn 2) 影响组件:所有 TCP/UDP 客户端组件rn 3) 影响版本:v3.1.2 及之前所有版本rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.2 更新 ***[/color][/size][/b]rn rn[b][i]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/i][/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2、由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,多个 OnClose() / OnError() 事件同时发生时,组件只会向应用通知第一个事件,后续事件则忽略rn 4、应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]rn/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrn rn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rn rn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rn rn delete pInfo;rnrn[/code]rn------------------------------------------------------------------------------------------------rn rn[b][size=16px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rn rn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]rn方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocketrn[/code] 4、HPSocket4C.dll 动态链接库发行版本 [code=text]rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn[/code]rn[b][i]> 全面启用 Buffer Pool 缓存机制:[/i][/b]rn-----------------rn 1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn 2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn 3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn 6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rn------------------------------------------------------------------------------------------------
TCP和UDP的区别、HTTP
网络OSI七层模型 物理层:主要定义物理设备标准,主要作用是传输比特流 数据链路层:定义了如何格式化数据进行传输,以及如何控制对物理介质的访问  以太网 网络层:在不同网络之间的主机提供网络连接和路径选择 IP、ICMP、ARP、RARP、RIP、OSPF 传输层:定义一些传输数据的协议和端口 TCP、UDP 会话层:在系统之间发起会话或者接收会话请求 表示层:定义会话的数据格式,
http 协议 tcp/udp
从本地读取文件,然后通过自己Udp 或者<em>tcp</em> 发送出去,走的是<em>http</em>协议,在客户端可以通过vlc来 接受
通信协议——Http、TCP、UDP
通信协议——Http、TCP、UDP
通信协议:HTTP、TCP、UDP
好久没有更新我的博客了, 估计都长霉了.. 项目都忙得差不多了,  公司这两天也搬家了 , 先来没事 就写点东西.咱今天不提代码怎样,说点其他的 先来谈谈iOS开发中常见的通信协议  ,废话不说了,  直接来.... 都是通信协议,也就是通信时所遵守的规则,只有双方按照这个规则“说话”,对方才能理解或为之服务。 TCP   HTTP   UDP三者的关系: TCP/IP是个协议组,可分为四
体系架构,TCP/UDP,http
网络层次划分 ① 物理层    该层为上层协议提供了一个传输数据的可靠的物理媒体。简单的说,物理层确保原始的数据可在各种物理媒体上传输。物理层记住两个重要的设备名称,中继器(Repeater,也叫放大器)和集线器。 ② 数据链路层    数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。
通信协议——HTTP、TCP、UDP
TCP HTTP UDP三者的关系
TCP通信框架
TCP<em>通信框架</em> 1 概述 2 整体结构示意图 2.1 客户端 2.2 接入层 2.3 业务层 2.4 运营监控层 2.5 资源层 3 通信方式 3.1 客户端到接入层 3.2 接入层内部 3.3 接入层到资源层 3.4 接入层到业务层 ......
HP-Socket开发TCP Client
HP-Socket开发TCP Client。 简单地TCP Client,示例如何使用HP-Socket。
可靠、高性能的 TCP/HTTP 负载均衡器
HAProxy 可靠、<em>高性能</em>的 TCP/HTTP 负载均衡器 [url]<em>http</em>://haproxy.1wt.eu/[/url]
UDP通信框架和代码
UDP<em>通信框架</em>和代码,本人还只是个Java菜鸟,上传改代码只是为了互相交流
HP-Socket开发TCP Server
HP-Socket开发TCP Server。 简单地TCP Server,示例如何使用HP-Socket
通用高性能 Windows Socket 组件 HP-Socket v2.2.2 正式发布
[img=<em>http</em>://bcs.duapp.com/jessma/blog/201306/Project-HP-Socket.png][/img]rnrn  HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。rnrn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>s://code.google.com/p/ldcsaa/]<em>http</em>s://code.google.com/p/ldcsaa/[/url]rnrn----------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rnrn[b] 更新记录:[/b]rn*** v2.2.2 更新 ***rn > 优化心跳检测相关功能:rn -----------------rn * IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn * CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn * CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rnrn[b]*** v2.2.1 更新 ***[/b]rn> PULL 模型支持:rn-----------------rn * ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn * 增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rn> Server:rn-----------------rn * 服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn * 增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn * 增加 PULL Server Socket 接口 IPullServerSocketrn * 增加 PULL Server Socket 实现类 CIocpPullServerrn> Client:rn-----------------rn * 客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn * 客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn * 增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn * 增加 PULL Client Socket 接口 IPullClientSocketrn * 增加 PULL Client Socket 实现类 CPullClientSocket  rn> 其它更新:rn-----------------rn * 增加 PULL Socket 测试程序 TestEcho-Pullrn * 在 SocketHelper.h (.cpp) 中添加若干帮助结构体rn> 升级说明:rn-----------------rn * 使用 HP-Socket v2.1.1 的应用程序可以安全升级到 v2.2.1rn * 由于 ISocketServer、ISocketClient 和 CSocketClient 的名称已修改,因此,应用程序需要对引用的名称和包含的头文件名作相应修改
【圣诞呈献】高性能 Socket 组件 HP-Socket v3.1.1 正式发布
[img=<em>http</em>s://img-bbs.csdn.net/upload/201312/25/1387938383_193519.png][/img]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rnrn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn------------------------------------------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v3.1.1 更新 ***[/color][/size][/b]rnrn[b][i]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/i][/b]rn-----------------rn1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn3、HPSocket4C.dll 使用方法rnrn [i]方法一:rn --------------------------------------------------------------------------------------rn (0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn (1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn (2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn (3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn (4) 调用相关导出函数操作 HPSocket 对象rn (5) ...... ......rn (6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn (7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rnrn 方法二:rn --------------------------------------------------------------------------------------rn (1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn (2) 通过包装类封装后,以面向对象的方式使用 HPSocket[/i]rnrn4、HPSocket4C.dll 动态链接库发行版本rnrn [i](1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug[/i])rnrn[b][i]> 全面启用 Buffer Pool 缓存机制:[/i][/b]rn-----------------rn1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn1、IServer 增加接口方法 DisconnectLongConnections() 用于断开所有超长连接rn2、IServer 删除接口方法 GetConnectionCriSec()rn3、IClient 增加方法 Get/SetFreeBufferPoolSize()、Get/SetFreeBufferPoolHold() 用于设置 Buffer Pool 缓存大小和阀值rn4、IPullServer 删除方法 Get/SetFreePullBufferPool()、Get/SetFreePullBufferHold()rn5、HPSocket.dll 和 HPSocket4C.dll 使用 /MT(d) 选项重新编译,消除对运行时库的依赖rn6、增加示例工程 TestEcho-4C,展示 HPSocket4C.dll 的使用方法rnrn[b][i]> 升级说明:[/i][/b]rn-----------------rn1、使用 HP-Socket v3.0.2 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.1rn2、如果工程想通过导入 HPSocket4C.dll 的方式使用 HP-Socket,请参考 TestEcho-4C 示例工程rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v3.0.2 更新 ***[/color][/size][/b]rnrn[b][i]> 把 HP-Socket 编译为动态链接库:[/i][/b]rn-----------------rn 1、应用程序可以通过导入源代码或动态链接库方式使用 HP-Socketrn 2、动态链接库使用方法rnrn [i]方法一:rn -----------------------------------------------------------------------rn (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn (1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象rn (2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象rnrn 方法二:rn -----------------------------------------------------------------------rn (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn (1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象[/i]rnrn 3、动态链接库发行版本rnrn [i](1) Bin/x86/HPSocket.dll - (32位/MBCS/Release)rn (2) Bin/x86/HPSocket_D.dll - (32位/MBCS/DeBug)rn (3) Bin/x86/HPSocket_U.dll - (32位/UNICODE/Release)rn (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)rn (5) Bin/x64/HPSocket.dll - (64位/MBCS/Release)rn (6) Bin/x64/HPSocket_D.dll - (64位/MBCS/DeBug)rn (7) Bin/x64/HPSocket_U.dll - (64位/UNICODE/Release)rn (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)[/i]rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v3.0.1 更新 ***[/color][/size][/b]rnrn[b][i]> 新增 UDP 通信组件:[/i][/b]rn-----------------rn 1、新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn 2、服务端组件 CUdpServer 采用 IOCP 通信模型rn 3、客户端组件 CUdpClient 采用 Event Select 通信模型rn 4、UDP 通信组件的接口与原 TCP 通信组件一致,简单实用rn 5、UDP 通信组件内置通信线路自动监测机制rn 6、新增 UDP 通信组件示例工程 TestEcho-UDPrnrn[b][i]> 代码重构与优化:[/i][/b]rn-----------------rn 1、规范所有接口、类以及代码文件的命名rn 2、重构和优化了大量组件代码rn 3、服务端组件加入读写锁机制,有效平衡处理性能与安全性rn 4、服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.3 更新 ***[/color][/size][/b]rnrn[b][i]> 连接 ID 的数据类型改为‘CONNID’:[/i][/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrnrn[b][i]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/i][/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.2 更新 ***[/color][/size][/b]rnrn[b][i]> 优化心跳检测相关功能:[/i][/b]rn -----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.1 更新 ***[/color][/size][/b]rnrn[b][i]> PULL 模型支持:[/i][/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rnrn[b][i]> Server:[/i][/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrnrn[b][i]> Client:[/i][/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket
高性能 Windows Socket 组件 HP-Socket v2.2.3 正式发布
[img=<em>http</em>://bcs.duapp.com/jessma/blog/201306/Project-HP-Socket.png][/img]rn  [color=#993300]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rnrn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rnrn------------------------------------------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.3 更新 ***[/color][/size][/b]rnrn[b]> 连接 ID 的数据类型改为‘CONNID’:[/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrnrn[b]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rnrn[b]> 其它更新:[/b]rn-----------------rn 1、放宽 CIocpServer 的最大 IOCP 工作线程数目限制(64 改为 500)rn 2、服务端 Socket 组件的 Disconnect() 方法增加一个标识参数‘bForce’,指示是否强制断开连接rn 3、调整连接 ID 的生成规则,避免生成数值为 0 的连接 IDrn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.2 更新 ***[/color][/size][/b]rnrn[b]> 优化心跳检测相关功能:[/b]rn -----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rnrn[b][size=18px][color=#0000FF]*** v2.2.1 更新 ***[/color][/size][/b]rnrn[b]> PULL 模型支持:[/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rnrn[b]> Server:[/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrnrn[b]> Client:[/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket  rnrn[b]> 其它更新:[/b]rn-----------------rn 1、增加 PULL Socket 测试程序 TestEcho-Pullrn 2、在 SocketHelper.h (.cpp) 中添加若干帮助结构体
【新年呈献】高性能 Socket 组件 HP-Socket v3.1.2 正式发布
[img=<em>http</em>s://img-bbs.csdn.net/upload/201401/14/1389669741_814180.png][/img]rn  [color=#993300]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rn rn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn ------------------------------------------------------------------------------------------------rn [b]通用性[/b]rn   通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rn rn[b]可用性[/b]rn   可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rn rn[b]<em>高性能</em>[/b]rn   作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn   客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn   服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rn rn[b]伸缩性[/b]rn   可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.1.2 更新 ***[/size][/color][/b]rn rn[b]> 修改 Server 组件的 OnClose() / OnError() 事件的触发规则:[/b]rn-----------------rn 1、以前版本的 TCP/UDP Server 组件中,当关闭一个连接时可能会同时触发一个 OnClose() 事件和若干个 OnError() 事件rn 2. 由于存在上述可能性,所以应用程序需要对 OnClose() / OnError() 的处理事件代码段进行同步rn 3、从 v3.1.2 开始,当多个 OnClose() / OnError() 事件同时发生时,组件只会向应用程序通知第一个事件,后续事件则忽略rn 4. 因此,应用程序在处理 OnClose() / OnError() 事件时不必处理同步,减少了出错的可能和编写同步及检测代码的负担rn[code=c]/* 示例代码一:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // 以前版本:rn // 有可能存在并发的 OnClose()/OnError(),要把代码放在临界区中并检测返回值rn CCriSecLock locallock(m_csPkgInfo); // GetConnectionExtra(dwConnID, &pInfo) && pInfo != nullptr)rn rn m_Server->SetConnectionExtra(dwConnID, nullptr);rn delete pInfo;rn rnrnrn/* 示例代码二:*/rn/* ----------------------------------------------------------------------- */rnISocketListener::EnHandleResult CServerDlg::OnClose(CONNID dwConnID)rnrn // v3.1.2 版本:rn // 只会接收到一个 OnClose()/OnError() 事件,能安全地移除临界区代码和检测代码rnrn PVOID pInfo = nullptr;rn m_Server->GetConnectionExtra(dwConnID, &pInfo);rn ASSERT(pInfo != nullptr);rnrn delete pInfo;rn[/code]rn[b]> 其它更新:[/b]rn-----------------rn[code=text]1、调整 TCP Server 默认参数:rn1) DEFAULT_SOCKET_LISTEN_QUEUE : 300rn2) DEFAULT_ACCEPT_SOCKET_COUNT : 300rn3) DEFAULT_FREE_SOCKETOBJ_POOL : 150rn4) DEFAULT_FREE_SOCKETOBJ_HOLD : 450rn5) DEFAULT_FREE_BUFFEROBJ_POOL : 300rn6) DEFAULT_FREE_BUFFEROBJ_HOLD : 900rnrn2、调整 UDP Server 默认参数:rn1) DEFAULT_FREE_SOCKETOBJ_POOL : 150rn2) DEFAULT_FREE_SOCKETOBJ_HOLD : 450rn3) DEFAULT_FREE_BUFFEROBJ_POOL : 300rn4) DEFAULT_FREE_BUFFEROBJ_HOLD : 900[/code]rn[b]> 升级说明:[/b]rn-----------------rn 1、使用 HP-Socket v3.1.1 及以前版本的应用程序可以安全升级到 HP-Socket v3.1.2rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.1.1 更新 ***[/size][/color][/b]rn rn[b]> 增加导出纯 C 函数的动态链接库 HPSocket4C.dll:[/b]rn-----------------rn 1、增加代码文件 HPSocket4C.h 和 HPSocket4C.cpp,用于创建 HPSocket4C.dllrn 2、导出纯 C 函数,让其它语言(如:C/C#/Delphi 等)能方便地使用 HPSocketrn 3、HPSocket4C.dll 使用方法rn[code=text]方法一:rn----------------------------------------------------------------------------rn(0) (C/C++ 程序)包含 HPSocket4C.h 头文件rn(1) 调用 ::Create_HP_XxxListener() 函数创建监听器对象rn(2) 调用 ::Create_HP_Xxx(pListener) 函数创建 HPSocket 对象rn(3) 调用 ::HP_Set_FN_Xxx_OnYyy(pListener, ...) 函数设置监听器的回调函数rn(4) 调用相关导出函数操作 HPSocket 对象rn(5) ...... ......rn(6) 调用 ::Destroy_HP_Xxx(pSocket) 函数销毁 HPSocket 对象rn(7) 调用 ::Destroy_HP_XxxListener(pListener) 函数销毁监听器对象rn rn方法二:rn----------------------------------------------------------------------------rn(1) 应用程序把需要用到的导出函数封装到特定语言的包装类中rn(2) 通过包装类封装后,以面向对象的方式使用 HPSocket[/code]rn 4、HPSocket4C.dll 动态链接库发行版本rn rn (1) x86/HPSocket4C.dll - (32位/MBCS/Release)rn (2) x86/HPSocket4C_D.dll - (32位/MBCS/DeBug)rn (3) x86/HPSocket4C_U.dll - (32位/UNICODE/Release)rn (4) x86/HPSocket4C_UD.dll - (32位/UNICODE/DeBug)rn (5) x64/HPSocket4C.dll - (64位/MBCS/Release)rn (6) x64/HPSocket4C_D.dll - (64位/MBCS/DeBug)rn (7) x64/HPSocket4C_U.dll - (64位/UNICODE/Release)rn (8) x64/HPSocket4C_UD.dll - (64位/UNICODE/DeBug)rn rn[b]> 全面启用 Buffer Pool 缓存机制:[/b]rn-----------------rn 1、Common/Src 增加代码文件 bufferpool.h 和 bufferpool.cpp,实现 Buffer Pool 缓存机制rn 2、通过 Buffer Pool 缓存机制提升内存使用效率,减少动态内存分配和释放操作,避免内存空洞rn 3、CTcpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 4、CUdpClient 用 CItemPool 和 TItemList 实现发送缓冲区rn 5、CTcpPullClient 用 CItemPool 和 TItemList 实现发送缓冲区和 PULL 缓冲区rn 6、CTcpPullServer 用 CBufferPool 和 TBuffer 实现 PULL 缓冲区rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.0.2 更新 ***[/size][/color][/b]rn rn[b]> 把 HP-Socket 编译为动态链接库:[/b]rn -----------------rn 1、应用程序可以通过导入源代码或动态链接库方式使用 HP-Socketrn 2、动态链接库使用方法rn[code=text]方法一:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象rn(2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象rn rn方法二:rn-----------------------------------------------------------------------rn(0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn(1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象[/code]rn 3、动态链接库发行版本rn rn (1) Bin/x86/HPSocket.dll - (32位/MBCS/Release)rn (2) Bin/x86/HPSocket_D.dll - (32位/MBCS/DeBug)rn (3) Bin/x86/HPSocket_U.dll - (32位/UNICODE/Release)rn (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)rn (5) Bin/x64/HPSocket.dll - (64位/MBCS/Release)rn (6) Bin/x64/HPSocket_D.dll - (64位/MBCS/DeBug)rn (7) Bin/x64/HPSocket_U.dll - (64位/UNICODE/Release)rn (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v3.0.1 更新 ***[/size][/color][/b]rn rn[b]> 新增 UDP 通信组件:[/b]rn-----------------rn 1、新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn 2、服务端组件 CUdpServer 采用 IOCP 通信模型rn 3、客户端组件 CUdpClient 采用 Event Select 通信模型rn 4、UDP 通信组件的接口与原 TCP 通信组件一致,简单实用rn 5、UDP 通信组件内置通信线路自动监测机制rn 6、新增 UDP 通信组件示例工程 TestEcho-UDPrn rn[b]> 代码重构与优化:[/b]rn-----------------rn 1、规范所有接口、类以及代码文件的命名rn 2、重构和优化了大量组件代码rn 3、服务端组件加入读写锁机制,有效平衡处理性能与安全性rn 4、服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v2.2.3 更新 ***[/size][/color][/b]rn rn[b]> 连接 ID 的数据类型改为‘CONNID’:[/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrn rn[b]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v2.2.2 更新 ***[/size][/color][/b]rn rn[b]> 优化心跳检测相关功能:[/b]rn-----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rn rn[b][color=#0000FF][size=16px]*** v2.2.1 更新 ***[/size][/color][/b]rn rn[b]> PULL 模型支持:[/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rn rn[b]> Server:[/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrn rn[b]> Client:[/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket
Http、TCP/IP、UDP 协议栈
Http、TCP、UDP--通信协议
浅谈HTTP、TCP、UDP、IP协议
浅谈HTTP、TCP、UDP、IP协议概念HTTP 报文结构TCP UDPTCP/IP补充 概念 (记得深入学习传输协议时候还是在大学的网络工程课程,时间过了近3年了,现在重新拾起这块知识) start: HTTP 报文结构 HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。 HTTP请求报文: 一个HTTP...
TCP UDP HTTP 的关系和区别
TCP UDP HTTP 三者的关系: TCP/IP是个协议组,可分为四个层次:网络接口层、网络层、传输层和应用层。 在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。 在传输层中有TCP协议与UDP协议。 在应用层有HTTP、FTP、TELNET、SMTP、DNS等协议。 TCP 传送控制协议(Transmission Control Protocol...
 http;tcp/ip;UDP;ftp
 rn想请教一下在一台NT主机上这几种协议分别能支持多少人连接?rn那一种速度最快。
tcp,udp,http包大小?
一般<em>tcp</em>,<em>udp</em>,<em>http</em>的数据包有多大呢?rn有限制大小没有?
高性能 Windows Socket 组件 HP-Socket v3.0.1 正式发布
[img=<em>http</em>s://img-bbs.csdn.net/upload/201310/29/1382985891_702949.png][/img]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rnrn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn------------------------------------------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v3.0.1 更新 ***[/color][/b][/size]rnrn[b] > 新增 UDP 通信组件:[/b]rn-----------------rn新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn服务端组件 CUdpServer 采用 IOCP 通信模型rn客户端组件 CUdpClient 采用 Event Select 通信模型rnUDP 通信组件的接口与原 TCP 通信组件一致,简单实用rnUDP 通信组件内置通信线路自动监测机制rn新增 UDP 通信组件示例工程 TestEcho-UDPrnrn[b]> 代码重构与优化:[/b]rn-----------------rn规范所有接口、类以及代码文件的命名rn重构和优化了大量组件代码rn服务端组件加入读写锁机制,有效平衡处理性能与安全性rn服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rnrn[b]> 升级说明:[/b]rn -----------------rn使用 HP-Socket v2.2.3 的应用程序可以安全升级到 HP-Socket v3.0.1rn由于重命名了大量接口、类以及代码文件,因此升级时需要作相应调整rn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v2.2.3 更新 ***[/color][/b][/size]rnrn[b]> 连接 ID 的数据类型改为‘CONNID’:[/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrnrn[b]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rnrn[b]> 其它更新:[/b]rn-----------------rn 1、放宽 CIocpServer 的最大 IOCP 工作线程数目限制(64 改为 500)rn 2、服务端 Socket 组件的 Disconnect() 方法增加一个标识参数‘bForce’,指示是否强制断开连接rn 3、调整连接 ID 的生成规则,避免生成数值为 0 的连接 IDrn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v2.2.2 更新 ***[/color][/b][/size]rnrn[b]> 优化心跳检测相关功能:[/b]rn -----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rnrn[size=18px][b][color=#333399]*** v2.2.1 更新 ***[/color][/b][/size]rnrn[b]> PULL 模型支持:[/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rnrn[b]> Server:[/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrnrn[b]> Client:[/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket  rnrn[b]> 其它更新:[/b]rn-----------------rn 1、增加 PULL Socket 测试程序 TestEcho-Pullrn 2、在 SocketHelper.h (.cpp) 中添加若干帮助结构体
.net cs TCP通信框架
.net cs TCP<em>通信框架</em>rnrn rnrn版本:1.0.0.1rnrn开发主言:c#rnrn开发环境:vs2008+.net framework 2.0rnrn软件特点:支持动软代码生成器所生成三层框架代码。支持阻塞式函数调用。可以用于聊天软件开发,以及简单游戏<em>通信框架</em>。rnrn解决了 cs程序开发过程中的直连数据库所造成的连接安全隐患的问题。rnrn解决了 webservice以及wcf开发时的性能问题以及开发效率的问题。rnrn解决了 与现有三层框架代码兼容的问题。rnrn解决了 cs程序用户间互相通信的问题。rnrn解决了 wince系统下gprs信号不稳定时程序使用的问题。rnrn服务器端示例介绍:rnrn创建监听对象:rnrn rnrn?rnSocketListener listener = new SocketListener();rn rnrn  启动监听并注册事件:rnrn?rnlistener.BeforeDataReceive += new SocketListener.BeforeDataReceiveEventHandler(listener_BeforeDataReceive);rnlistener.DataReceive += new SocketListener.DataReceiveEventHandler(listener_DataReceive);rnlistener.ClientChanged +=new ClientChangedHandler(listener_ClientChanged); rnlistener.RegeditSession += new RegeditSessionEventHandler(listener_RegeditSession);rnlistener.StartListening();rn  BeforeDataReceive 事件用于对<em>通信框架</em>事件接收前的判断是否需要处理。rnrn  DataReceive 事件用框架未处理的数据。rnrn  RegeditSession 用于用户登录。这里要以作为是否允许用户登录的判断。rnrn  StartListening 用于开启监听。rnrn  如果用于作为数据处理服务器需要对DbHelper.ConnectionString 属性进行初始化。rnrn  DbHelper可以自定义用于支持不同数据库比如mysql,oracle,sqllite等。rnrn服务器端示例截图:rnrn  [img=<em>http</em>://pic002.cnblogs.com/images/2012/349231/2012120816204042.png][/img]rnrnrnrn客户端示例介绍:rn rnMsSqlClient clientrn  客户端需要定义:MsSqlClient 与服务器端进行通信。rnrn客户端的事件有:rn rn[code=csharp]DbHelperSQL.client = client;rnclient.SystemMessageRecv += new SocketClient.SystemMessageRecvEventHandler(client_SystemMessageRecv);rnclient.ClientChanged += new SocketClient.ClientChangedEventHandler(client_ClientChanged);rnclient.TextRecv += new SocketClient.TextRecvEventHandler(client_TextRecv);rnclient.Connected += new SocketClient.ConnectedEventHandler(client_Connected);rnclient.InitOnLineUsers += new SocketClient.InitOnLineUsersEventHandler(client_InitOnLineUsers);rnclient.ClosedConnected += new SocketClient.ClosedConnectedEventHandler(client_ClosedConnected);rnclient.StartClient();[/code]rn  SystemMessageRecv 事件用于接收服务器端发送的通知。rnrn  ClientChanged 事件用于处理其他用户的断开连接处理。rnrn  TextRecv 事件用于接收其用户发送的文本消息。rnrn  InitOnLineUsers 事件用于接收在线用户列表。rnrn客户端提供的函数有:rn rn[code=csharp]My.Net.Tcp.MsSqlClient.ColumnExists(string, string) rnMy.Net.Tcp.MsSqlClient.ColumnExists(string, string, int) rnMy.Net.Tcp.MsSqlClient.ExecuteSql(string) rnMy.Net.Tcp.MsSqlClient.ExecuteSql(string, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.ExecuteSql(string, int) rnMy.Net.Tcp.MsSqlClient.ExecuteSql(string, int, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List) rnMy.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List) rnMy.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List, int) rnMy.Net.Tcp.MsSqlClient.ExecuteSqlTran(System.Collections.Generic.List, int) rnMy.Net.Tcp.MsSqlClient.Exists(string) rnMy.Net.Tcp.MsSqlClient.Exists(string, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.Exists(string, int) rnMy.Net.Tcp.MsSqlClient.Exists(string, int, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.GetMaxID(string, string) rnMy.Net.Tcp.MsSqlClient.GetMaxID(string, string, int) rnMy.Net.Tcp.MsSqlClient.GetSingle(string) rnMy.Net.Tcp.MsSqlClient.GetSingle(string, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.GetSingle(string, int) rnMy.Net.Tcp.MsSqlClient.GetSingle(string, int, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.MsSqlClient(System.Net.IPAddress, int) rnMy.Net.Tcp.MsSqlClient.MsSqlClient() rnMy.Net.Tcp.MsSqlClient.MsSqlClient(System.Net.IPAddress) rnMy.Net.Tcp.MsSqlClient.MsSqlClient(string) rnMy.Net.Tcp.MsSqlClient.Query(string) rnMy.Net.Tcp.MsSqlClient.Query(string, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.Query(string, int) rnMy.Net.Tcp.MsSqlClient.Query(string, int, params System.Data.SqlClient.SqlParameter[]) rnMy.Net.Tcp.MsSqlClient.TabExists(string) rnMy.Net.Tcp.MsSqlClient.TabExists(string, int)[/code]rn  这30个函数,包括一般代码生器所需要的所有的函数。rnrn如果与其他用户通信你可以使用下面的6个函数:rn rn[code=csharp]My.Net.Tcp.SocketClient.SendToAllUser(string) rnMy.Net.Tcp.SocketClient.SendToAllUser(int, byte[]) rnMy.Net.Tcp.SocketClient.SendToOtherUser(string, string) rnMy.Net.Tcp.SocketClient.SendToOtherUser(string, int, byte[]) rnMy.Net.Tcp.SocketClient.SendToOtherUser(System.Collections.Generic.List, string) rnMy.Net.Tcp.SocketClient.SendToOtherUser(System.Collections.Generic.List, int, byte[])[/code]rn  你可以发送字符串,也要以发送自定义的数据流。rnrn客户端示例图片:rn[img=<em>http</em>://pic002.cnblogs.com/images/2012/349231/2012120816324271.png][/img]rnrnrnTab 发送消息:rnrn是将消息发送给其他客户。rnrn其余的还有执行sql的示例,执行查询的示例,以及使用动软代码生成器操作的例子。rnrn rnrn客户端与服务器端界面以及功能只是提供简单的测试使用。你可以根据自已的需要自定义。rnrn示例代码下载地址:[url=<em>http</em>://www.teilihua.com/showforum-13.aspx]<em>http</em>://www.teilihua.com/showforum-13.aspx[/url]
基于CocoaAsyncSocket的tcp通信框架
基于CocoaAsyncSocket的<em>tcp</em><em>通信框架</em> 文件内容和下面博文一致,可以先看文章,确认有用后再下载。 当然最好是自己实践一遍了。 <em>http</em>://blog.csdn.net/zhu410289616/article/details/46731605 <em>http</em>://blog.csdn.net/zhu410289616/article/details/46739019
几个TCP Socket的通信框架
<em>http</em>://www.oschina.net/p/simple-sockets <em>http</em>://www.oschina.net/p/cwss <em>http</em>://www.oschina.net/p/<em>tcp</em>proxy <em>http</em>://www.oschina.net/p/kryonet <em>http</em>://www.oschina.net/p/jwebsocket <em>http</em>://www.oschina.net...
高性能 Windows Socket 组件 HP-Socket v3.0.2 正式发布
[img=<em>http</em>s://img-bbs.csdn.net/upload/201311/26/1385442299_425668.png][/img]rn  [color=#800000]HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。HP-Socket 对通信层实现完全封装,上层应用不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到各类应用程序中;另外,为了让大家能更方便的学习 HP-Socket,特此精心制作了一个功能测试示例(Test Echo)一个性能测试示例(Test Echo-PFM)和一个 PULL 模型测试示例(Test Echo-Pull),用户可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。[/color]rnrn * HP-Socket 官方网站:[url=<em>http</em>://www.jessma.org]<em>http</em>://www.jessma.org[/url]rn * HP-Socket 下载地址:[url=<em>http</em>://www.oschina.net/p/<em>hp-socket</em>]<em>http</em>://www.oschina.net/p/<em>hp-socket</em>[/url]rn------------------------------------------------------------------------------------------------rn[b]通用性[/b]rn  通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;rn与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。rnrn[b]可用性[/b]rn  可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。rnrn[b]<em>高性能</em>[/b]rn  作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:rn  客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。rn  服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。rnrn[b]伸缩性[/b]rn  可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。rn------------------------------------------------------------------------------------------------rnrn[color=#333399][size=18px][b]*** v3.0.2 更新 ***[/b][/size][/color]rnrn[b][i]> 把 HP-Socket 编译为动态链接库:[/i][/b]rn-----------------rn 1、应用程序可以通过导入源代码或动态链接库方式使用 HP-Socketrn 2、动态链接库使用方法rnrn [i]方法一:rn -----------------------------------------------------------------------rn (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn (1) 调用 HP_Create_Xxx() 函数创建 HPSocket 对象rn (2) 使用完毕后调用 HP_Destroy_Xxx() 函数销毁 HPSocket 对象rnrn 方法二:rn -----------------------------------------------------------------------rn (0) 应用程序包含 SocketInterface.h 和 HPSocket.h 头文件rn (1) 创建 CXxxWrapper 包装器,通过包装器智能指针使用 HPSocket 对象[/i]rnrn 3、动态链接库发行版本rnrn [i](1) Bin/x86/HPSocket.dll - (32位/MBCS/Release)rn (2) Bin/x86/HPSocket_D.dll - (32位/MBCS/DeBug)rn (3) Bin/x86/HPSocket_U.dll - (32位/UNICODE/Release)rn (4) Bin/x86/HPSocket_UD.dll - (32位/UNICODE/DeBug)rn (5) Bin/x64/HPSocket.dll - (64位/MBCS/Release)rn (6) Bin/x64/HPSocket_D.dll - (64位/MBCS/DeBug)rn (7) Bin/x64/HPSocket_U.dll - (64位/UNICODE/Release)rn (8) Bin/x64/HPSocket_UD.dll - (64位/UNICODE/DeBug)[/i]rnrn[b][i]> 其它更新:[/i][/b]rn-----------------rn 1、把组件接口以及监听器接口的声明移到 SocketInterface.hrn 2、IServer 增加接口方法 GetConnectionCount()/GetConnectPeriod() 分别获取当前连接数和某个连接的时长rn 3、IServer 接口方法 GetListenAddress()/GetClientAddress() 的 CString& 参数改为 LPTSTRrn 4、IClient 接口方法 GetLocalAddress() 的 CString& 参数改为 LPTSTRrn 5、SocketHelper.h 中所有全局函数的 CString& 参数均改为 LPTSTRrn 6、示例工程 TestEcho-Pull 和 TestEcho-PFM 改为用动态链接库方式使用 HP-Socketrnrn[b][i]> 升级说明:[/i][/b]rn-----------------rn 1、使用 HP-Socket v3.0.1 的应用程序可以安全升级到 HP-Socket v3.0.2rn 2、由于某些接口方法的参数作了调整,因此请参考测试工程作相应修改rn 3、如果工程想通过动态链接库方式使用 HP-Socket,请参考 TestEcho-Pull 或 TestEcho-PFM 示例工程rn------------------------------------------------------------------------------------------------rnrn[color=#333399][size=18px][b]*** v3.0.1 更新 ***[/b][/size][/color]rnrn[b] [i]> 新增 UDP 通信组件:[/i][/b]rn-----------------rn 1、新增两个 UDP 通信组件:CUdpServer 为服务端组件,CUdpClient 为客户端组件rn 2、服务端组件 CUdpServer 采用 IOCP 通信模型rn 3、客户端组件 CUdpClient 采用 Event Select 通信模型rn 4、UDP 通信组件的接口与原 TCP 通信组件一致,简单实用rn 5、UDP 通信组件内置通信线路自动监测机制rn 6、新增 UDP 通信组件示例工程 TestEcho-UDPrnrn[b][i]> 代码重构与优化:[/i][/b]rn-----------------rn 1、规范所有接口、类以及代码文件的命名rn 2、重构和优化了大量组件代码rn 3、服务端组件加入读写锁机制,有效平衡处理性能与安全性rn 4、服务端组件的 Socket 对象缓存列表设置了锁定时间,提高访问的安全性rn------------------------------------------------------------------------------------------------rnrn[color=#333399][size=18px][b]*** v2.2.3 更新 ***[/b][/size][/color]rnrn[b][i]> 连接 ID 的数据类型改为‘CONNID’:[/i][/b]rn-----------------rn 1、在SocketHelper.h 中定义 CONNID 数据类型(默认:typedef ULONG_PTR CONNID)rn 2、应用程序可以把 CONNID 定义为其希望的类型(如:ULONG / ULONGLONG 等)rn 3、为了便于移植与维护,应用程序的任何地方都应该用‘CONNID’类型引用连接 IDrnrn[b][i]> 服务端 Socket 组件支持为每个连接绑定附加数据:[/i][/b]rn-----------------rn 1、IServerSocket 和 CIocpServer 增加方法 Get/SetConnectionExtra()rn 2、通过上述两个方法,应用程序可以为每个连接绑定任意附加数据并把数据获取出来rn------------------------------------------------------------------------------------------------rnrn[color=#333399][size=18px][b]*** v2.2.2 更新 ***[/b][/size][/color]rnrn[b][i]> 优化心跳检测相关功能:[/i][/b]rn -----------------rn 1、IServerSocket 和 IClientSocket 的 Get/SetKeepAliveTimes() 方法改为 Get/SetKeepAliveTime()rn 2、CIocpServer 和 CClientSocket 的默认 KeepAliveTime 属性改为 5000rn 3、CIocpServer 和 CClientSocket 的默认 KeepAliveInterval 属性改为 3000rn------------------------------------------------------------------------------------------------rnrn[color=#333399][size=18px][b]*** v2.2.1 更新 ***[/b][/size][/color]rnrn[b][i]> PULL 模型支持:[/i][/b]rn-----------------rn 1、ISocketListener 增加 PULL 模型数据接收通知方法 OnReceive(dwConnID, int)rn 2、增加 PULL Socket 接口 IPullSocket,该接口的 Fetch(dwConnID, pBuffer, iLength) 方法用于抓取通信数据rnrn[b][i]> Server:[/i][/b]rn-----------------rn 1、服务端 Socket 接口 ISocketServer 改名为 IServerSocketrn 2、增加 PULL Server Socket 监听器抽象类 CPullServerSocketListenerrn 3、增加 PULL Server Socket 接口 IPullServerSocketrn 4、增加 PULL Server Socket 实现类 CIocpPullServerrnrn[b][i]> Client:[/i][/b]rn-----------------rn 1、客户端 Socket 接口 ISocketClient 改名为 IClientSocketrn 2、客户端 Socket 实现类 CSocketClient 改名为 CClientSocketrn 3、增加 PULL Client Socket 监听器抽象类 CPullClientSocketListenerrn 4、增加 PULL Client Socket 接口 IPullClientSocketrn 5、增加 PULL Client Socket 实现类 CPullClientSocket
高性能TCP/UDP服务吞吐测试工具
通过该工具可以简单地对一个TCP或UDP服务进行大量连接并发测试;工具提供一些简单的参数设置主要包括:服务类型,测试的连接数,数据格式和数据发送的模式。用户只需要简单地设置相关参数就可以对现有的服务进行相应的测试,从而快速地知道当前编写服务所能处理的效能指标。
高性能TCP/UDP服务器网络层代码
内含doc文档. ClientNet.h 用户客户端的网络通讯接口的开发,若服务器要作 为客户端连接其他服务器也应该使用使用该文件中 类开发 DataType.h 一些常用的数据类型的定义。 HeadFile.h 传输层基本模块的定义,开发者无需关心该文件。 RunLog.h 日志模块,用于开发写调试信息使用,也可以用来记录重要 数据。 TcpMng.h 用于服务器端TCP传输层的开发。
通用高性能 Windows Socket 组件 HP-Socket
HP-Socket 是一套通用的<em>高性能</em> Windows Socket 组件包,包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),广泛适用于 Windows 平台的 TCP 通信系统。
C#的 TCP/IP通信框架EMTASS2.1
C#的 TCP/IP<em>通信框架</em>EMTASS2.1:有了它无需了解SOCKET原理也能实现TCP通信编程
Go-Go语言的TCP网络通信框架
Go语言的TCP网络<em>通信框架</em>
网络访问的HTTP、TCP/IP、UDP协议详解
OkHttp的使用 static class RequestThread implements Runnable{ private String requestPath; public RequestThread(String requestPath){ this.requestPath = requestPath; } @Override public vo
关于cocos2dx网络编程httpudptcp,socket
先学习概念来自仗剑量天的博客socket 套接字 用于描述IP地址和端口。 套接字分为 1. <em>tcp</em> 流式套接字 2. <em>udp</em> 数据报式套接字socket是对<em>tcp</em>/ip协议的封装和应用,它本身并不是协议,而是一个调用接口(API),也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输。 HTTP协议也叫超文本传输协议 HTTP是一个无连接,无状态连接的应用层协议,由请求-
网络编程TCP/IP和UDP以及HTTP协议
OSI的七层模型和TCP/IP的四层模型: TCP/IP协议是从OSI的七层模型中简化出来的: 四层模型的详图:   什么是HTTP协议: HTTP称为 超文本传输协议 是一种基于应用层的通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器, 所有的WWW文件都必须遵守这个标准. 目前我们使用的是HTTP/1.1 版本. 通常,由HTTP客户端发...
HTTP、TCP、UDP 对应的java类
HTTP(Hypertext Transfer Protocol )是应用层 该协议在java中对应封装接口java.net.HttpURLConnection HTTP是基于TCP协议的 TCP(Transfer Control Protocol )是传输层 该协议在java中对应的是封装接口Socket嵌套字 UDP(User Datagram Protocol)也是传输层 ...
SOCKS,HTTP,TCP,UDP,socket等关系?
有什么联系么?哪一个比较底层?rn套接字部分的connect,recv等函数是不是windows操作系统中唯一进行连接及相关操作的函数?
netty网络框架,封装 httptcpudp的例子
netty网络框架,封装 <em>http</em>,<em>tcp</em>,<em>udp</em>的例子,自己整理的,关键的地方都有注释,对学习netty网络框架很有帮助,希望大家喜欢,欢迎留言评论
TCP,UDP,HTTP,HTTPS协议的区别理解
首先大家得理解 协议两个字是什么意思, 协议就是定义的规则,HTTP协议,就是名字叫HTTP的一种规则,HTTPS协议,名字叫HTTPS的一种规则,TCP协议就是名字叫TCP的规则,UDP协议就是名字叫UDP的一种规则 应该都知道 网络发送分为以下几层 应用层 与其它计算机进行通讯的一个应用,它是对应应用程序的通信服务的。 例如,一个没有通信功能的字处理程序
浅谈网络编程技术(TCP、UDP、HTTP)
在介绍这三种编程技术之前,先说一下网络编程的三要素: IP地址:网络中计算机的唯一标识 端口:正在运行程序的标识(有效的端口区间在0~65535之间,其中0~1024系统使用或保留端口) 协议:通信的规则 举一个简单的例子: 我要和某人说话,这个步骤流程是什么? 首先,我要找到说话的对象(通过IP地址找到的); 然后,开始对她说话,怎么说,要对着耳朵说(端口); 说了什么,I love y
网络协议详解(HTTP/TCP/UDP/IP)
详看这篇文章<em>http</em>s://blog.csdn.net/u012371712/article/details/80795297
关于http协议,tcp/UDP协议
<em>tcp</em>/UDP:同:同为美国国防部设计的两个协议,处于<em>tcp</em>/ip协议的传输层 异:1.流式与报文式传输 2.连不连接 3.对系统资源的要求(TCP较多,UDP少); 4.UDP程序结构较简单; 5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。 注:三次握手:client A ;server B A-&amp;gt;B,B-&amp;gt;A,A-&amp;gt;B 四次挥手: A-...
TCP、UDP、Http、Xmpp 的区别和联系
一:TCP、UDP、Http、Xmpp的区别    下面是自己的理解,如有不正确之处,请指正。 (1)TCP、UDP是数据传输方式   1.1 采用TCP传输数据需要和服务器建立连接,完成三次握手,传输数据长度不限,效率   比UDP低一点。   1.2 采用UDP传输数据不需要和服务器建立连接,直接丢数据给另一端,是否接收到不     做验证,数据长度最大64kb,因为不
手机及电脑抓包(tcp,udp,http
1.软件 下面两款都是免费软件。 1.1 fiddler 界面见图1-1. 图1-1 fiddler界面 1.2 wireshark 界面见图1-2. 图1-2 wireshark 界面 2. 电脑抓包 <em>http</em>包可以在fiddler里面看。 <em>http</em>及<em>tcp</em>、<em>udp</em>包可以在wireshark中看。 3.手机抓包 首先设置fiddler。见图3-
关于tcp/udp/http协议的理解:
目录• Tcp ”面向连接”• Udp “面向非连接”• Http &amp;amp;quot;用于www浏览的协议&amp;amp;quot; • Tcp ”面向连接” 即在正式通信前必须和对方先建立起连接.一个<em>tcp</em>必须要经过三次对话才能建立起来。 第一次 A向B发出连接请求数据包; 第二次 B向A发送统一连接和要求同步(AB一个在发送一个在接受); 第三次 A向B确认B的要求同步,之后A才向B发送文件。 让我们来举一个小例子:...
Java中UDP、TCP及HTTP通信
刚学。原理不写在这里了。 首先,在Java.net包中有表示互联网协议地址(IP)的类InetAddress,此类没有构造函数,其对应实例可由其静态方法getByAddress(byte[] addr);getByName(String host);getLocalHost() 等获取InetAddress对象。 import java.net.*; class IPDemo { p
使用node搭建UDP,TCP,HTTP服务
使用node搭建<em>udp</em>,<em>tcp</em>,<em>http</em>服务相对于Java,C++来说简易很多。
SOCKS,HTTP,TCP,UDP,socket等关系
有什么联系么?哪一个比较底层?rn套接字部分的connect,recv等函数是不是windows操作系统中唯一进行连接及相关操作的函数?
httptcp/ip udp协议原理
TCP—传输控制协议,提供的是面向连接、可靠的字节流服务,传输数据前经过“三次握手”建立连接,保证数据传输的可靠性,但效率比较低。一般用于对于数据传输安全性较高的场合。UDP—用户数据报协议(User Datagram Protocol),是一个简单的面向数据报的运输层协议,面向无连接。UDP不提供可靠性,数据传输可能发生错序,丢包,但效率较高。一般用于对于实时性要求较高的场合。IP协议是用于将多个
让人糊里糊涂的HTTP、TCP、UDP、Socket
TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。 HTTP本身就是一个协议,是从Web服务器传输超文本到本地浏览器的传送协议。 TCP面向连接,提供可靠服务,面向字节流;而UDP是无连接的,传输不可靠的,面向报文的。
对于tcp/udp http协议的认识
<em>tcp</em>/<em>udp</em> <em>http</em>协议 网络七层:物理数据链路网络传输会话表示应用 ip是位于网络层,<em>tcp</em>是位于传输层。<em>http</em>是位于应用层。 <em>tcp</em>协议是基于ip协议的,两者互补。 <em>tcp</em>协议的三次握手: 【第一次握手】:客户端尝试连接服务器,向服务器发送syn(同步序列编号)包,syn=j,客户端进入SYN_SEND状态等待服务器确认; 【第二次握手】:服务器收到客户端的syn包并确认(a...
(二)udp,tcp粘包,广播,HTTP
recv()特征 1.如果连接端断开,recv会立即结束阻塞返回空字符串 2.当接收缓冲区为空时会阻塞 3.如果recv一次接收不完缓冲区内容,下次会继续接收,确保数据不丢失 send()特征 1.如果另一端不存在还试图使用send进行发送,则会产生BrokenPeError异常  2.当发送缓冲区满时会阻塞 网络收发缓冲区 *缓冲区的功能 :协调读写速度,减少和磁盘交互 recv 和 send ...
探究网络协议(IP、HTTP、TCP和UDP)
网络协议:为计算机网络中进行数据交换而建立的规则、标准或约定的集合。 网络协议是由三个要素组成: (1) 语义。语义是解释控制信息每个部分的意义。它规定了需要发出何种控制信息,以及完成的动作与做出什么样的响应。 (2) 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。 (3) 时序。时序是对事件发生顺序的详细说明。 国际标准化组织ISO在80年代提出的开放系统互联参考模型...
TCP与UDP的区别,以及Http和Socket
TCP与UDP的区别  TCP:Transmission Control Protocol   传输控制协议    UDP: User Data Protocol 用户数据包协议 TCP面向有链接的通信服务 UDP面向无连接的通信服务 TCP提供可靠的通信传输 UDP不可靠,会丢包 TCP保证数据顺序 UDP不保证 TCP数据无边
HTTP、HTTPS、TCP、UDP 四种协议笔记
负载均衡监听支持 HTTP、HTTPS、TCP、UDP 四种协议的监听服务,以下是区别。   建议应用场景 特性 TCP 注重可靠性,对数据准确性要求高,速度可以相对较慢的场景,如文件传输、发送或接收邮件、远程登录;无特殊要求的Web 应用 面
HTTP和tcpudp,ip等网络协议学习
前言,计算机网络的分层,按照OSI标准,分为物理层(硬件),数据链路层(双工等这一些),网络层(以太网协议等),传输层(可以理解为计算机里面的传输),会话层(创建一个会话),表示层,应用层,看到狭义来说,可以把最后的会话,表示,应用层都统一为应用层1,在数据链接层上的以太网协议,分为head和data,head固定为18字节,data:46~1500,所以当传输的数据大于1518,就必须分为多个帧来
TCP/IP、HTTP、Socke、UDP的区别
一、TCP/IP、Http、Socket的区别 [<em>http</em>://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html](<em>http</em>://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html 二、WebSocket原理及与<em>http</em>1.0/1.1 long poll和 ajax轮...
HTTP、TCP、UDP、Socket、servlet区别与联系
一 看概念 1 <em>http</em>://blog.csdn.net/xijiaohuangcao/article/details/6105623    TCP/IP是个协议组,可分为三个层次:网络层、传输层和应用层。在网络层有IP协议、ICMP协议、ARP协议、RARP协议和BOOTP协议。在传输层中有TCP协议与UDP协议 。 在应用层有FTP、HTTP、TELNET、SMTP、DNS等协议。因此,H
TCP的三次握手与四次挥手理解及面试题(很全面)
本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问 序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:占4个字节,期待收到对方下一个报文段的第一个数据字节的序号;序列号表示报文...
TCP OR UDP ?
如果开设一个侦听来自网络上的UDP数据包的线程,用<em>tcp</em>的liston还是UDP的recvfrom?rn
TCP和UDP
我想用c#写一个UDP传输图像的程序,应该怎么写?
TCP、UDP 区别(关键词:计算机网络/TCP/UDP)
2. TCP、UDP 区别 |xxxxx|TCPxxxxxxxx|UDPxxxxxxxxxxxxxx| |区别|面向连接xxxxx|无连接xxxxxxxxxxx| |区别|可靠的传输xx|不可靠的数据传输| |区别|提供流量控制|不提供流量控制xx| |区别|提供拥塞控制|不提供拥塞控制xx| |区别|字节流传输xx|数据报传输xxxxxx| |区别|全双工通信xx|xxxxxxxxxxxxxxx...
C.++沉思录(中文版) 高清版下载
内容简介   这是一本C++编程方面的经典书籍,作者是一对享有盛誉的技术伉俪,Andrew Boeing和Barbar Moo。本书基于作者在知名技术杂志发表的技术文章、世界各地发表的演讲以及斯坦福大学的课程讲义整理、写作而成,融聚了作者10多年C++程序生涯的真知灼见。全书分为大部分,共32章,分别对C++语言的历史和特点、类和继承、STL与泛型编程、库的设计等几大技术话题进行了详细而深入的讨论,细微之处几乎涵盖了C++所有的设计思想和技术细节。全书通过精心挑选的实例,向读者传达先进的程序设计的方法和理念。本书适合有一定C++编程经验的程序员阅读。 目录   序幕 1   0.1 第一次尝试 相关下载链接:[url=//download.csdn.net/download/ghsf3344/2341448?utm_source=bbsseo]//download.csdn.net/download/ghsf3344/2341448?utm_source=bbsseo[/url]
裸奔用户首选工具包 精益工具包下载
我找得到的最小最全的为裸奔用户提供安全保障客户端软件 相关下载链接:[url=//download.csdn.net/download/zhq445078388/2779274?utm_source=bbsseo]//download.csdn.net/download/zhq445078388/2779274?utm_source=bbsseo[/url]
椭圆拟合之Matlab实现下载
针对一组x,y值的基于最小平方方差和的椭圆和圆的拟合,用matlab实现 相关下载链接:[url=//download.csdn.net/download/tongxingzheng_tong/3695637?utm_source=bbsseo]//download.csdn.net/download/tongxingzheng_tong/3695637?utm_source=bbsseo[/url]
我们是很有底线的