高性能 TCP & UDP 通信框架 HP-Socket v3.3.1 正式发布

DuMiYue 2015-01-27 11:55:03
加精

  HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件、客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++、C#、Delphi、E(易语言)、Java、Python 等编程语言接口。HP-Socket 对通信层实现完全封装,应用程序不必关注通信层的任何细节;HP-Socket 提供基于事件通知模型的 API 接口,能非常简单高效地整合到新旧应用程序中。
  为了让使用者能方便快速地学习和使用 HP-Socket,迅速掌握框架的设计思想和使用方法,特此精心制作了大量 Demo 示例(如:PUSH 模型示例、PULL 模型示例、性能测试示例以及其它编程语言示例)。HP-Socket 目前运行在 Windows 平台,将来会实现跨平台支持。


* HP-Socket 官方网站:http://www.jessma.org
* HP-Socket 下载地址:http://www.oschina.net/p/hp-socket
------------------------------------------------------------------------------------------------
【通用性】
  1、HP-Socket 的唯一职责就是接收和发送字节流,不参与应用程序的协议解析等工作。
  2、HP-Socket 与应用程序通过接口进行交互,并完全解耦。任何应用只要实现了 HP-Socket 的接口规范都可以无缝整合 HP-Socket。

【易用性】
  1、易用性对所有通用框架都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,HP-Socket 的接口设计得非常简单和统一。
  2、HP-Socket 完全封装了所有底层通信细节,应用程序不必也不能干预底层通信操作。通信连接被抽象为 Connection ID,Connection ID 作为连接的唯一标识提供给应用程序来处理不同的连接。

【高性能】
  HP-Socket 作为底层的通用框架,性能是关键指标,绝对不能成为系统的瓶颈。HP-Socket 在设计上充分考虑性能、使用场景、复杂性和易用性等因素,作出以下几点设计决策:
  Client 组件:基于 Event Select 通信模型,在单独线程中执行通信操作,避免与主线程或其他线程相互干扰。每个组件对象管理一个 Socket 连接。
  Server 组件:基于 IOCP 通信模型,并结合缓存池、私有堆(Private Heap)等技术,支持超大规模连接,在高并发场景下实现高效内存管理。
  Agent 组件:对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接,一个 Agent 组件对象同时可管理多个 Socket 连接;Agent 组件与 Server 组件采用相同的技术架构,可以用作代理服务器或中转服务器的客户端部件。

【伸缩性】
  应用程序能够根据不同的容量要求、通信规模和资源状况等现实场景调整 HP-Socket 的各项性能参数(如:工作线程的数量、缓存池的大小、发送模式和接收模式等),优化资源配置,在满足应用需求的同时不必过度浪费资源。
------------------------------------------------------------------------------------------------

*** v3.3.1 更新 ***

> 组件接口调整:
-----------------
1、IClientListener 监听器接口用 IClient* 参数取代 CONNID 参数标识 Client 组件对象
2、增加 IPullClient 接口,用作 PULL Client 组件的基接口
3、IPullSocket 和 IPullClient 接口增加 Peek() 方法用于窥探缓冲区数据(不会移除缓冲区数据)
4、增加 IComplexSocketListener 监听器接口,用作 Server/Agent 组件的监听器基接口
5、IComplexSocketListener 提供 OnShutdown 通知方法取代 Server/Agent 组件原来的 OnServerShutdown/OnAgentShutdown
6、IClient组件增加 Get/SetExtra() 方法用于保存自定义附加数据
7、IServer 和 IAgent 组件增加“静默连接处理”相关方法:

1) DisconnectSilenceConnections():// 断开超过指定时长的静默连接
2) GetSilencePeriod():// 获取某个连接静默时间(毫秒)
3) SetMarkSilence():// 设置是否标记静默时间
4) IsMarkSilence():// 检测是否标记静默时间
> 增加 UdpCast 通信组件:
-----------------
1、UdpClient / UdpServer 用于 C/S 模式的点对点单播通信,但在某些应用场景下,需要用到组播或广播通信
2、UdpCast 实现了组播或广播通信,UdpCast 提供 IUdpCast 接口,该接口继承自 IClient,有以下接口方法:

/* 1) 通知接口方法: */
OnPrepareConnect(IClient* pClient, SOCKET socket)
OnConnect(IClient* pClient)
OnSend(IClient* pClient, const BYTE* pData, int iLength)
OnReceive(IClient* pClient, const BYTE* pData, int iLength)
OnClose(IClient* pClient)
OnError(IClient* pClient, EnSocketOperation enOperation, int iErrorCode)

/* 2) 主要操作方法: */
Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE /*该参数被忽略*/)
Stop()
Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)
Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)
SendPackets(const WSABUF pBuffers[], int iCount)
3、增加 UdpCast 使用示例:TestUDPCast

------------------------------------------------------------------------------------------------

*** v3.2.3 更新 ***

> common-src 优化:
-----------------
1、优化通信组件的同步机制
2、整体性能提升约 10%
------------------------------------------------------------------------------------------------

*** v3.2.2 更新 ***

> 增加若干帮助方法:
-----------------
1、批量发送方法 SendPackets()

1) IClient/IServer/IAgent 增加方法 SendPackets(pBuffers[], iBufferCount)
2) 对于 TCP 组件 - 顺序发送所有数据包
3) 对于 UDP 组件 - 把所有数据包组合成一个数据包发送(总长度不能大于 UDP 包最大长度)
2、小文件发送方法 SendSmallFile()

1) TCP 组件增加方法 SendSmallFile(lpszFileName, pHead, pTail)
2) 通过 pHead 和 pTail 参数,可以分别在文件数据的头部和尾部加入自定义数据
3) SendSmallFile() 只能发送 4096 KB 以内大小的文件
3、HPSocket.dll 和 HPSocket4C.dll 增加以下导出方法

1) SYS_WSAGetLastError():调用系统的 WSAGetLastError()
2) SYS_SetSocketOption():调用系统的 setsockopt()
3) SYS_GetSocketOption():调用系统的 getsockopt()
4) SYS_IoctlSocket() :调用系统的 ioctlsocket()
5) SYS_WSAIoctl() :调用系统的 WSAIoctl()
------------------------------------------------------------------------------------------------

*** v3.2.1 更新 ***

> 增加 TcpAgent / TcpPullAgent 通信组件:
-----------------
1、对于代理服务器或中转服务器等应用场景,服务器自身也作为客户端向其它服务器发起大规模连接
2、TcpClient / TcpPullClient 基于 Event Select 通信模型,每个组件对象管理一个 Socket,并开启一个线程,不适合上述应用场景
3、TcpAgent / TcpPullAgent 基于 IOCP 通信模型,一个组件对象管理多个 Socket,适合用作代理服务器或中转服务器的客户端通信组件
4、TcpAgent / TcpPullAgent 的使用方式依然简单,提供以下接口方法:

/* 1) 通知接口方法:*/
OnPrepareConnect(CONNID dwConnID, SOCKET socket)
OnConnect(CONNID dwConnID)
OnSend(CONNID dwConnID, const BYTE* pData, int iLength)
OnReceive(CONNID dwConnID, const BYTE* pData, int iLength) //(Push 模型)
OnReceive(CONNID dwConnID, int iLength) //(Pull 模型)
OnClose(CONNID dwConnID)
OnError(CONNID dwConnID, EnSocketOperation enOperation, int iErrorCode)
OnAgentShutdown()

/* 2) 主要操作方法:*/
Start(LPCTSTR pszBindAddress = nullptr, BOOL bAsyncConnect = TRUE)
Stop()
Connect(LPCTSTR pszRemoteAddress, USHORT usPort, CONNID* pdwConnID = nullptr)
Send(CONNID dwConnID, const BYTE* pBuffer, int iLength, int iOffset = 0)
Disconnect(CONNID dwConnID, BOOL bForce = TRUE)
Fetch(CONNID dwConnID, BYTE* pData, int iLength) //(Pull 模型)
5、增加 TcpAgent / TcpPullAgent 使用示例:
* Agent-PFM
* Agent-Pull
* Agent-4C

6、增加 TcpAgent + TcpServer 实现的 HTTP 代理服务器示例:HttpProxy


> 增加 HPSocket for Java SDK:
-----------------
1、提供 Java 开发包:hpsocket-3.2.1.jar(通过 JNA 实现,目前只支持 Windows 平台)
2、运行环境:JDK 1.6+,JVM 运行在 server 模式("java -server",在 client 模式下性能受影响)
3、MBCS 和 Unicode 版本分布位于包 org.jessma.hpsocket.mbcs 和 org.jessma.hpsocket.unicode
4、HPSocket for Java SDK 提供以下通信组件:

1) TcpServer:TCP 通信服务端组件,支持 PUSH/PULL 模型
2) TcpClient:TCP 通信客户端组件,支持 PUSH/PULL 模型
3) TcpAgent :TCP 通信 Agent 组件,支持 PUSH/PULL 模型
4) UdpServer:UDP 通信服务端组件,支持 PUSH 模型
5) UdpClient:UDP 通信客户端组件,支持 PUSH 模型
5、HPSocket4J 的使用方法(以 TcpAgent 为例):

/* 0: 应用程序加入 hpsocket-3.2.1.jar 和 jna-4.1.0.jar */

/* 1: 创建通信组件对象 */
TcpAgent agent = TcpAgent.create(Mode.PUSH);

/* 2: 设置回调函数对象 */
// (可选)
agent.setCallBackOnPrepareConnect(new OnPrepareConnectImpl());
// (可选)
agent.setCallBackOnConnect(new OnConnectImpl());
// (必须)PUSH 模型需要设置 OnReceive 回调函数对象
agent.setCallBackOnReceive(new OnReceiveImpl());
// (必须)PULL 模型需要设置 OnPullReceive 回调函数对象
// agent.setCallBackOnPullReceive(new OnPullReceiveImpl());
// (可选)
agent.setCallBackOnSend(new OnSendImpl());
// (必须)
agent.setCallBackOnClose(new OnCloseImpl());
// (必须)
agent.setCallBackOnError(new OnErrorImpl());
// (可选)
agent.setCallBackOnAgentShutdown(new OnAgentShutdownImpl());

/* 3:启动通信组件 */
agent.start("127.0.0.1", false);

/* 4:连接服务器 */
agent.connect("localhost", (short)5555, pdwConnID);

/* 5:处理通信数据 */
// 响应 OnReceive / OnPullReceive 事件接收数据
// 使用 agent.send(dwConnID, data, data.length) 发送数据

/* 6:关闭通信组件 */
agent.stop();

/* 7:销毁通信组件 */
TcpAgent.destroy(agent);
6、增加示例工程 TestEcho-4J,展示 HPSocket4J 的使用方法(包括 PULL 模型示例和性能测试示例)


> 优化数据收发策略:
-----------------
1、Server 和 Agent 组件提供以下三种数据发送策略:

1)PACK - 打包模式(默认):尽量把多个发送操作的数据组合在一起发送,增加传输效率
2)SAFE - 安全模式:尽量把多个发送操作的数据组合在一起发送,并控制传输速度,避免缓冲区溢出
3)DIRECT - 直接模式:对每一个发送操作都直接投递,适用于负载不高但要求实时性较高的场合
2、Server 和 Agent 组件提供以下两种数据接收策略:

1)SERIAL - 串行模式(默认):顺序触发同一连接的 OnReceive 和 OnClose/OnError 事件
2)PARALLEL - 并行模式:在不同的通信线程中同时触发同一连接的 OnReceive 和 OnClose/OnError 事件
------------------------------------------------------------------------------------------------
...全文
5076 90 打赏 收藏 转发到动态 举报
写回复
用AI写文章
90 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssxgs 2016-04-09
  • 打赏
  • 举报
回复
最新更新:高性能 TCP & UDP 通信框架 HP-Socket v3.4.1 正式发布 http://bbs.csdn.net/topics/391930191
色郎中 2016-02-16
  • 打赏
  • 举报
回复
引用 87 楼 DuMiYue 的回复:
[quote=引用 86 楼 u010374185 的回复:]
有Qt调用Demo吗?

QT 也是一样用!!![/quote]

楼主,可以考虑到网易弄个公开课呀,专门介绍网络编程嘛,从0开始把你这个开源项目讲解一下,再出参考书,有了用户基础,考虑商用版本

公开课课,就算一个人收费100,以万计,一套公开课估计也能卖百万元计,配套教材也能赚不少,

参考嵌入式方向,韦东山,就是在网易开的公开课,免费上课,估计是通过卖开发板和书,补贴劳动付出

cc___999 2015-04-16
  • 打赏
  • 举报
回复
感谢分享 吾来学习一下 哈哈哈
DuMiYue 2015-02-11
  • 打赏
  • 举报
回复
引用 86 楼 u010374185 的回复:
有Qt调用Demo吗?
QT 也是一样用!!!
haoljp 2015-02-08
  • 打赏
  • 举报
回复
有Qt调用Demo吗?
JayTan_1992 2015-02-06
  • 打赏
  • 举报
回复
DuMiYue 2015-02-05
  • 打赏
  • 举报
回复
引用 83 楼 spark_li 的回复:
谁能高速一下那个httpproxy的demo那里有啊,谢谢了
https://github.com/ldcsaa/HP-Socket 下载 zip,搜索文件夹~
spark_li 2015-02-04
  • 打赏
  • 举报
回复
谁能高速一下那个httpproxy的demo那里有啊,谢谢了
spark_li 2015-02-04
  • 打赏
  • 举报
回复
晕倒了,找了半天,demo找不到
来人哥哥 2015-02-03
  • 打赏
  • 举报
回复
我能弱弱的问一句,这个是什么东西,要来干什么的吗? 大四狗的疑惑,难道我不适合从事这一行?
我是黑手 2015-02-03
  • 打赏
  • 举报
回复
感觉很牛掰的样子,厉害!
翅膀又硬了 2015-02-02
  • 打赏
  • 举报
回复
引用 74 楼 jordancar 的回复:
引用 44 楼 Joyhen 的回复:
[quote=引用 19 楼 wgodo 的回复:] 我的软件用的就是HPsocket, 已经安装在30万终端上,日活跃20万,该库十分稳定,从未出错,我是做网吧软件的,2000多家网吧使用(还不包括破解用户)。
牛B了,码农求带
你安装在30万终端又不是30万并发,这不值得炫耀,一个网吧有多少台机器?上千台算多了吧,随便写个不就够用了?[/quote]这么大的用户量,肯定应该自己写一个,不应该用不开源库。
伊顺鸣 2015-02-02
  • 打赏
  • 举报
回复
自己来看看吧
Sunny5816 2015-02-01
  • 打赏
  • 举报
回复
来自英国剑桥的通讯框架networkcomms 非常的简单优美, www.networkcomms.net 支持跨平台开发, 版本2.3.1是开源的,大家可以去我的博客看看基于networkcomms开发的demo源码. http://www.cnblogs.com/networkcomms
john_QQ:2335298917 2015-01-31
  • 打赏
  • 举报
回复
很好,很强大,感谢楼主分享
此后三年 2015-01-30
  • 打赏
  • 举报
回复
感谢楼主分享
小布 2015-01-30
  • 打赏
  • 举报
回复
引用 44 楼 Joyhen 的回复:
引用 19 楼 wgodo 的回复:
我的软件用的就是HPsocket, 已经安装在30万终端上,日活跃20万,该库十分稳定,从未出错,我是做网吧软件的,2000多家网吧使用(还不包括破解用户)。
牛B了,码农求带
你安装在30万终端又不是30万并发,这不值得炫耀,一个网吧有多少台机器?上千台算多了吧,随便写个不就够用了?
fywindy 2015-01-29
  • 打赏
  • 举报
回复
太牛逼了,我很喜欢呀
qnapjiujiu 2015-01-29
  • 打赏
  • 举报
回复
谢谢楼主分享!
S756975 2015-01-29
  • 打赏
  • 举报
回复
期待跨平台的版本。。顶一个
加载更多回复(62)
内容简介 《Linux高性能服务器编程》是Linux服务器编程领域的经典著作,由资深Linux软件开发工程师撰写,从网络协议、服务器编程核心要素、原理机制、工具框架等多角度全面阐释了编写高性能Linux服务器应用的方法、技巧和思想。不仅理论全面、深入,抓住了重点和难点,还包含两个综合性案例,极具实战意义。 《Linux高性能服务器编程》共17章,分为3个部分:第一部分对Linux服务器编程的核心基础——TCP/IP协议进行了深入的解读和阐述,包括TCP/IP协议族、TCP/IP协议,以及一个经典的TCP/IP通信案例;第二部分对高性能服务器编程的核心要素进行了全面深入的剖析,包含Linux网络编程API、高级I/O函数、Linux服务器程序规范、高性能服务器程序框架、I/O复用、信号、定时器、高性能I/O框架库Libevent、多进程编程、多线程编程、进程池和线程池等内容,原理、技术与方法并重;第三部分从侧重实战的角度讲解了高性能服务器的优化与监测,包含服务器的调制、调试和测试,以及各种实用系统监测工具的使用等内容。 本书另外免费赠送一个负载均衡服务器程序的完整实际项目的源代码! 作者简介 游 双,资深Linux软件开发工程师,对Linux网络编程,尤其是服务器端的编程,有非常深入的研究,实战经验也十分丰富。曾就职于摩托罗拉,担任高级Linux软件工程师。此外,他还精通C++、Android、QT等相关的技术。活跃于Chinaunix等专业技术社区,发表了大量关于Linux网络编程的文章,深受社区欢迎。 目录 前言 第一篇 TCPIP协议详解 第1章 TCPIP协议族 1.1 TCPIP协议族体系结构以及主要协议 1.1.1 数据链路层 1.1.2 网络层 1.1.3 传输层 1.1.4 应用层 1.2 封装 1.3 分用 1.4 测试网络 1.5 ARP协议工作原理 1.5.1 以太网ARP请求应答报文详解 1.5.2 ARP高速缓存的查看和修改 1.5.3 使用tcpdump观察ARP通信过程 1.6 DNS工作原理 1.6.1 DNS查询和应答报文详解 1.6.2 Linux下访问DNS服务 1.6.3 使用tcpdump观察DNS通信过程 1.7 socketTCPIP协议族的关系 第2章 IP协议详解 2.1 IP服务的特点 2.2 IPv4头部结构 2.2.1 IPv4头部结构 2.2.2 使用tcpdump观察IPv4头部结构 2.3 IP分片 2.4 IP路由 2.4.1 IP模块工作流程 2.4.2 路由机制 2.4.3 路由表更新 2.5 IP转发 2.6 重定向 2.6.1 ICMP重定向报文 2.6.2 主机重定向实例 2.7 IPv6头部结构 2.7.1 IPv6固定头部结构 2.7.2 IPv6扩展头部 第3章 TCP协议详解 3.1 TCP服务的特点 3.2 TCP头部结构 3.2.1 TCP固定头部结构 3.2.2 TCP头部选项 3.2.3 使用tcpdump观察TCP头部信息 3.3 TCP连接的建立和关闭 3.3.1 使用tcpdump观察TCP连接的建立和关闭 3.3.2 半关闭状态 3.3.3 连接超时 3.4 TCP状态转移 3.4.1 TCP状态转移总图 3.4.2 TIME_WAIT状态 3.5 复位报文段 3.5.1 访问不存在的端口 3.5.2 异常终止连接 3.5.3 处理半打开连接 3.6 TCP交互数据流 3.7 TCP成块数据流 3.8 带外数据 3.9 TCP超时重传 3.10 拥塞控制 3.10.1 拥塞控制概述 3.10.2 慢启动和拥塞避免 3.10.3 快速重传和快速恢复 第4章 TCPIP通信案例:访问Internet上的Web服务器 4.1 实例总图 4.2 部署代理服务器 4.2.1 HTTP代理服务器的工作原理 4.2.2 部署squid代理服务器 4.3 使用tcpdump抓取传输数据包 4.4 访问DNS服务器 4.5 本地名称查询 4.6 HTTP通信 4.6.1 HTTP请求 4.6.2 HTTP应答 4.7 实例总结 第二篇 深入解析高性能服务器编程 第5章 Linux网络编程基础API 5.1 socket地址API 5.1.1 主机字节序和网络字节序 5.1.2 通用socket地址 5.1.3 专用socket地址 5.1.4 IP地址转换函数 5.2 创建socket 5.3 命名socket 5.4 监听socket 5.5 接受连接 5.6 发起连接 5.7 关闭连接 5.8 数据读写 5.8.1 TCP数据读写 5.8.2 UDP数据读写 5.8.3 通用数据读写函数 5.9 带外标记 5.10 地址信息函数 5.11 socket选项 5.11.1 SO_REUSEADDR选项 5.11.2 SO_RCVBUF和SO_SNDBUF选项 5.11.3 SO_RCVLOWAT和SO_SNDLOWAT选项 5.11.4 SO_LINGER选项 5.12 网络信息API 5.12.1 gethostbyname和gethostbyaddr 5.12.2 getservbyname和getservbyport 5.12.3 getaddrinfo 5.12.4 getnameinfo 第6章 高级IO函数 6.1 pipe函数 6.2 dup函数和dup2函数 6.3 readv函数和writev函数 6.4 sendfile函数 6.5 mmap函数和munmap函数 6.6 splice函数 6.7 tee函数 6.8 fcntl函数 第7章 Linux服务器程序规范 7.1 日志 7.1.1 Linux系统日志 7.1.2 syslog函数 7.2 用户信息 7.2.1 UID、EUID、GID和EGID 7.2.2 切换用户 7.3 进程间关系 7.3.1 进程组 7.3.2 会话 7.3.3 用ps命令查看进程关系 7.4 系统资源限制 7.5 改变工作目录和根目录 7.6 服务器程序后台化 第8章 高性能服务器程序框架 8.1 服务器模型 8.1.1 CS模型 8.1.2 P2P模型 8.2 服务器编程框架 8.3 IO模型 8.4 两种高效的事件处理模式 8.4.1 Reactor模式 8.4.2 Proactor模式 8.4.3 模拟Proactor模式 8.5 两种高效的并发模式 8.5.1 半同步半异步模式 8.5.2 领导者追随者模式 8.6 有限状态机 8.7 提高服务器性能的其他建议 8.7.1 池 8.7.2 数据复制 8.7.3 上下文切换和锁 第9章 IO复用 9.1 select系统调用 9.1.1 select API 9.1.2 文件描述符就绪条件 9.1.3 处理带外数据 9.2 poll系统调用 9.3 epoll系列系统调用 9.3.1 内核事件表 9.3.2 epoll_wait函数 9.3.3 LT和ET模式 9.3.4 EPOLLONESHOT事件 9.4 三组IO复用函数的比较 9.5 IO复用的高级应用一:非阻塞connect 9.6 IO复用的高级应用二:聊天室程序 9.6.1 客户端 9.6.2 服务器 9.7 IO复用的高级应用三:同时处理TCPUDP服务 9.8 超级服务xinetd 9.8.1 xinetd配置文件 9.8.2 xinetd工作流程 第10章 信号 10.1 Linux信号概述 10.1.1 发送信号 10.1.2 信号处理方式 10.1.3 Linux信号 10.1.4 中断系统调用 10.2 信号函数 10.2.1 signal系统调用 10.2.2 sigaction系统调用 10.3 信号集 10.3.1 信号集函数 10.3.2 进程信号掩码 10.3.3 被挂起的信号 10.4 统一事件源 10.5 网络编程相关信号 10.5.1 SIGHUP 10.5.2 SIGPIPE 10.5.3 SIGURG 第11章 定时器 11.1 socket选项SO_RCVTIMEO和SO_SNDTIMEO 11.2  SIGALRM信号 11.2.1 基于升序链表的定时器 11.2.2 处理非活动连接 11.3 IO复用系统调用的超时参数 11.4 高性能定时器 11.4.1 时间轮 11.4.2 时间堆 第12章 高性能IO框架库Libevent 12.1 IO框架库概述 12.2 Libevent源码分析 12.2.1 一个实例 12.2.2 源代码组织结构 12.2.3 event结构体 12.2.4 往注册事件队列中添加事件处理器 12.2.5 往事件多路分发器中注册事件 12.2.6 eventop结构体 12.2.7 event_base结构体 12.2.8 事件循环 第13章 多进程编程 13.1 fork系统调用 13.2 exec系列系统调用 13.3 处理僵尸进程 13.4 管道 13.5 信号量 13.5.1 信号量原语 13.5.2 semget系统调用 13.5.3 semop系统调用 13.5.4 semctl系统调用 13.5.5 特殊键值IPC_PRIVATE 13.6 共享内存 13.6.1 shmget系统调用 13.6.2 shmat和shmdt系统调用 13.6.3 shmctl系统调用 13.6.4 共享内存的POSIX方法 13.6.5 共享内存实例 13.7 消息队列 13.7.1 msgget系统调用 13.7.2 msgsnd系统调用 13.7.3 msgrcv系统调用 13.7.4 msgctl系统调用 13.8 IPC命令 13.9 在进程间传递文件描述符 第14章 多线程编程 14.1 Linux线程概述 14.1.1 线程模型 14.1.2 Linux线程库 14.2 创建线程和结束线程 14.3 线程属性 14.4 POSIX信号量 14.5 互斥锁 14.5.1 互斥锁基础API 14.5.2 互斥锁属性 14.5.3 死锁举例 14.6 条件变量 14.7 线程同步机制包装类 14.8 多线程环境 14.8.1 可重入函数 14.8.2 线程和进程 14.8.3 线程和信号 第15章 进程池和线程池 15.1 进程池和线程池概述 15.2 处理多客户 15.3 半同步半异步进程池实现 15.4 用进程池实现的简单CGI服务器 15.5 半同步半反应堆线程池实现 15.6 用线程池实现的简单Web服务器 15.6.1 http_conn类 15.6.2 main函数 第三篇 高性能服务器优化与监测 第16章 服务器调制、调试和测试 16.1 最大文件描述符数 16.2 调整内核参数 16.2.1 procsysfs目录下的部分文件 16.2.2 procsysnet目录下的部分文件 16.3 gdb调试 16.3.1 用gdb调试多进程程序 16.3.2 用gdb调试多线程程序 16.4 压力测试 第17章 系统监测工具 17.1 tcpdump 17.2 lsof 17.3 nc 17.4 strace 17.5 netstat 17.6 vmstat 17.7 ifstat 17.8 mpstat
第一章 概论 .................................................................................................................. 1 1.1 网络的历史................................................................. ...................................... 1 1.2 OSI 模型........................................................................................................... 3 1.3 Internet 体系模型.............................................................................................. 4 1.4 客户/服务器模型............................................................................................... 5 1.4 UNIX 的历史 ................................................................................................... 7 1.4.1 Unix 诞生前的故事 ................................................................................. 7 1.4.2 UNIX 的诞生.......................................................................................... 8 1.4.3 1979 – UNIX 第七版 ............................................................................. 10 1.4.4 UNIX 仅仅是历史吗?............................................................................. 11 1.5 Linux 的发展.................................................................................................. 11 1.5.1 Linux 的发展历史 .................................................................................. 12 1.5.2 什么叫 GNU? ...................................................................................... 12 1.5.3 Linux 的特色 ........................................................................................ 13 1.5.4 硬件需求............................................................................................... 14 1.5.5 Linux 可用的软件 ................................................................................. 14 1.5.6 为什么选择 Linux ? ............................................................................ 15 1.6 Linux 和 Unix 的发展 .................................................................................... 15 第二章 UNIX/Linux 模型...............................................................................................17 2.1 UNIX/Linux 基本结构.......................................................................................17 2.2 输入和输出......................................................................................................19 2.2.1 UNIX/Linux 文件系统简介 ......................................................................19 2.2.2 流和标准 I/O 库......................................................................................20 2.3 进程 ................................................................................................................21 第三章 进程控制 ..........................................................................................................22 3.1 进程的建立与运行 ...........................................................................................22 3.1.1 进程的概念 ............................................................................................22 3.1.2 进程的建立 ............................................................................................22 3.1.3 进程的运行 ............................................................................................24 3.1.4 数据和文件描述符的继承 .......................................................................29 3.2 进程的控制操作...............................................................................................31 3.2.1 进程的终止 ............................................................................................31 3.2.2 进程的同步 ............................................................................................32 3.2.3 进程终止的特殊情况 ..............................................................................33 3.2.4 进程控制的实例 .....................................................................................33 3.3 进程的属性......................................................................................................38 3.3.1 进程标识符 ............................................................................................38 3.3.2 进程的组标识符 .....................................................................................39 3.3.3 进程环境................................................................................................40 3.3.4 进程的当前目录 .....................................................................................42 3.3.5 进程的有效标识符..................................................................................43 3.3.6 进程的资源 ............................................................................................44 3.3.7 进程的优先级.........................................................................................45 3.4 守护进程 .........................................................................................................46 3.4.1 简介.......................................................................................................46 3.4.2 守护进程的启动 ............................................................................................46 3.4.3 守护进程的错误输出 ..............................................................................46 3.4.4 守护进程的建立 .....................................................................................48 3.5 本章小结 .........................................................................................................49 第四章 进程间通信.......................................................................................................50 4.1 进程间通信的一些基本概念 .............................................................................50 4.2 信号 ................................................................................................................50 4.2.1 信号的处理 ............................................................................................52 4.2.2 信号与系统调用的关系...........................................................................54 4.2.3 信号的复位 ............................................................................................55 4.2.4 在进程间发送信号..................................................................................56 4.2.5 系统调用 alarm()和 pause()......................................................................58 4.2.6 系统调用 setjmp()和 longjmp().................................................................62 4.3 管道 ................................................................................................................63 4.3.1 用 C 来建立、使用管道 ..........................................................................65 4.3.2 需要注意的问题 .....................................................................................72 4.4 有名管道 .........................................................................................................72 4.4.1 有名管道的创建 .....................................................................................72 4.4.2 有名管道的 I/O 使用...............................................................................73 4.4.3 未提到的关于有名管道的一些注意 .........................................................75 4.5 文件和记录锁定...............................................................................................75 4.5.1 实例程序及其说明..................................................................................75 4.5.2 锁定中的几个概念..................................................................................78 4.5.3 System V 的咨询锁定..............................................................................78 4.5.4 BSD 的咨询式锁定 .................................................................................79 4.5.5 前面两种锁定方式的比较 .......................................................................81 4.5.6 Linux 的其它上锁技术 ............................................................................81 4.6 System V IPC ...................................................................................................84 4.6.1 ipcs 命令 ................................................................................................85 4.6.2 ipcrm 命令..............................................................................................86 4.7 消息队列(Message Queues)...........................................................................86 4.7.1 有关的数据结构 .....................................................................................86 4.7.2 有关的函数 ............................................................................................89 4.7.3 消息队列实例——msgtool,一个交互式的消息队列使用工具 ..................94 4.8 信号量(Semaphores) .........................................................................................97 4.8.1 有关的数据结构 .....................................................................................98 4.8.2 有关的函数 ............................................................................................99 4.8.3 信号量的实例——semtool,交互式的信号量使用工具........................... 103 4.9 共享内存(Shared Memory) .............................................................................. 109 4.9.1 有关的数据结构 ................................................................................... 109 4.9.2 有关的函数 .......................................................................................... 110 4.9.3 共享内存应用举例——shmtool,交互式的共享内存使用工具................... 112 4.9.4 共享内存与信号量的结合使用 .............................................................. 114 第五章 通信协议简介 ................................................................................................. 120 5.1 引言 .............................................................................................................. 120 5.2 XNS(Xerox Network Systems)概述.............................................................. 120 5.2.1 XNS 分层结构...................................................................................... 120 IPX/SPX 协议概述........................................................................................ 122 5.3 5.3.1 网际包交换(IPX) ............................................................................. 122 5.3.2 排序包交换(SPX)............................................................................. 124 5.4 Net BIOS 概述................................................................................................ 124 5.5 Apple Talk 概述 .............................................................................................. 125 5.6 TCP/IP 概述................................................................................................... 126 5.6.1 TCP/IP 结构模型 .................................................................................. 126 5.6.2 Internet 协议(IP)............................................................................... 127 5.6.3 传输控制协议(TCP) ......................................................................... 132 5.6.4 用户数据报文协议................................................................................ 134 5.7 小结 .............................................................................................................. 135 第六章 Berkeley 套接字 ............................................................................................. 136 6.1 引言 ............................................................................................................. 136 6.2 概述 ............................................................................................................. 136 6.2.1 Socket 的历史...................................................................................... 136 6.2.2 Socket 的功能...................................................................................... 136 6.2.3 套接字的三种类型............................................................................... 138 6.3 Linux 支配的网络协议................................................................................... 141 6.3.1 什么是 TCP/IP? ................................................................................... 141 6.4 套接字地址................................................................................................... 142 6.4.1 什么是 Socket? .................................................................................. 142 6.4.2 Socket 描述符...................................................................................... 142 6.4.3 一个套接字是怎样在网络上传输数据的?............................................ 143 6.5 套接字的一些基本知识 ................................................................................. 144 6.5.1 基本结构............................................................................................. 144 6.5.2 基本转换函数...................................................................................... 145 6.6 基本套接字调用............................................................................................ 147 6.6.1 socket() 函数....................................................................................... 147 6.6.2 bind() 函数 ......................................................................................... 148 6.6.3 connect()函数 ...................................................................................... 150 6.6.4 listen() 函数........................................................................................ 151 6.6.5 accept()函数 ........................................................................................ 152 6.6.6 send()、recv()函数 ............................................................................... 154 6.6.7 sendto() 和 recvfrom() 函数 ................................................................. 155 6.6.8 close()和 shutdown()函数...................................................................... 156 6.6.9 setsockopt() 和 getsockopt() 函数 ......................................................... 157 6.6.10 getpeername()函数.............................................................................. 157 6.6.11 gethostname()函数.............................................................................. 158 6.7 DNS 的操作.................................................................................................. 158 6.7.1 理解 DNS............................................................................................ 158 6.7.2 和 DNS 有关的函数和结构 .................................................................. 158 6.7.3 DNS 例程............................................................................................ 159 6.8 套接字的 Client/Server 结构实现的例子.......................................................... 160 6.8.1 简单的流服务器 .................................................................................. 161 6.8.2 简单的流式套接字客户端程序 ............................................................. 163 6.8.3 数据报套接字例程(DatagramSockets)............................................... 165 6.9 保留端口 ...................................................................................................... 169 6.9.1 简介.................................................................................................... 169 6.9.2 保留端口............................................................................................. 170 6.10 五种 I/O 模式................................................................................................. 179 6.10.1 阻塞 I/O 模式 .................................................................................... 179 6.10.2 非阻塞模式 I/O.................................................................................. 180 6.10.3 I/O 多路复用 ..................................................................................... 181 6.10.4 信号驱动 I/O 模式 ............................................................................. 182 6.10.5 异步 I/O 模式 .................................................................................... 185 6.10.6 几种 I/O 模式的比较.......................................................................... 186 6.10.7 fcntl()函数 ......................................................................................... 186 6.10.8 套接字选择项 select()函数.................................................................. 187 6.11 带外数据..................................................................................................... 190 6.11.1 TCP 的带外数据 ................................................................................ 190 6.11.2 OOB 传输套接字例程(服务器代码 Server.c) ................................... 193 6.11.3 OOB 传输套接字例程(客户端代码 Client.c).................................... 196 6.11.4 编译例子 ........................................................................................... 199 6.12 使用 Inetd(Internet 超级服务器) ............................................................... 199 6.12.1 简介.................................................................................................. 199 6.12.2 一个简单的 inetd 使用的服务器程序 hello inet service.......................... 199 6.12.3 /etc/services 和 /etc/inetd.conf 文件 ..................................................... 200 6.12.4 一个复杂一些的 inetd 服务器程序 ...................................................... 201 6.12.5 一个更加复杂的 inetd 服务器程序 ...................................................... 203 6.12.6 程序必须遵守的安全性准则............................................................... 205 6.12.7 小结.................................................................................................. 205 6.13 本章总结 .................................................................................................... 205 第七章 网络安全性..................................................................................................... 206 7.1 网络安全简介 ................................................................................................ 206 7.1.1 网络安全的重要性................................................................................ 206 7.1.2 信息系统安全的脆弱性......................................................................... 207 7.2 Linux 网络不安全的因素 ................................................................................ 209 7.3 Linux 程序员安全........................................................................................... 211 7.3.1 系统子程序 .......................................................................................... 212 7.3.2 标准 C 函数库....................................................................................... 214 7.3.3 书写安全的 C 程序................................................................................ 216 7.3.4 SUID/SGID 程序指导准则...................................................................... 217 7.3.5 root 程序的设计.................................................................................... 218 7.4 小结 .............................................................................................................. 219 第八章 Ping 例程 ....................................................................................................... 220 8.1 Ping 命令简介 ................................................................................................ 220 8.2 Ping 的基本原理............................................................................................. 220 8.3 小结 .............................................................................................................. 221 第九章 tftp 例程......................................................................................................... 222 9.1 tftp 协议简介.................................................................................................. 222 9.2 tftp 的使用 ..................................................................................................... 222 9.3 tftp 的原理 ..................................................................................................... 223 9.3 tftp 的基本结构 .............................................................................................. 223 9.4 小节 .............................................................................................................. 225 第十章 远程命令执行 ................................................................................................. 226 10.1 引言 ............................................................................................................ 226 10.2 rcmd 函数和 rshd 服务器............................................................................... 227 10.3 rexec 函数和 rexecd 服务器........................................................................... 233 第十一章 远程注册..................................................................................................... 235 11.1 简介............................................................................................................. 235 11.2 终端行律和伪终端........................................................................................ 235 11.3 终端方式字和控制终端................................................................................. 239 11.4 rlogin 概述.................................................................................................... 242 11.5 窗口环境...................................................................................................... 242 11.6 流控制与伪终端方式字................................................................................. 243 11.7 rlogin 客户程序............................................................................................. 245 11.8 rlogin 服务器 ................................................................................................ 246 第十二章 远程过程调用.............................................................................................. 249 12.1 引言 ............................................................................................................ 249 12.2 远程过程调用模型 ....................................................................................... 249 12.3 传统过程调用和远程过程调用的比较 ........................................................... 250 12.4 远程过程调用的定义.................................................................................... 252 12.5 远程过程调用的有关问题............................................................................. 252 12.5.1 远程过程调用传送协议....................................................................... 253 12.5.2 Sun RPC ........................................................................................... 254 12.5.3 Xerox Courier .................................................................................... 254 12.5.4 Apollo RPC........................................................................................ 255 12.6 stub 过程简介............................................................................................... 256 12.7 rpcgen 简介 .................................................................................................. 256 12.8 分布式程序生成的例子 ................................................................................ 257 12.8.1 我们如何能够构造出一个分布式应用程序........................................... 257 12.9 小结 ............................................................................................................ 283 第十三章 远程磁带的访问 .......................................................................................... 284 13.1 简介 ............................................................................................................ 284 13.2 Linux 磁带驱动器的处理 .............................................................................. 285 13.3 rmt 协议....................................................................................................... 285 13.4 rmt 服务器设计分析 ..................................................................................... 286 第十四章 WWW 上 HTTP 协议.................................................................................. 290 14.1 引言............................................................................................................ 290 14.2 HTTP 客户请求........................................................................................... 290 14.2.1 客户端 .............................................................................................. 290 14.2.2 服务器端........................................................................................... 290 14.2.3 Web 请求简介.................................................................................... 291 14.2.4 HTTP – HyperText Transfer Protocol 超文本传输协议 ........................... 295 14.3 Web 编程 .................................................................................................... 297 14.4 小结 ........................................................................................................... 301 附录 A 有关网络通信的服务和网络库函数................................................................... 302 附录 B Vi 使用简介..................................................................................................... 319 B.1 Vi 基本观念................................................................................................... 319 B.1.1 进入与离开.......................................................................................... 319 B.1.2 Vi 输入模式 ......................................................................................... 319 B.2 Vi 基本编辑................................................................................................... 320 B.2.1 删除与修改.......................................................................................... 320 B.3 Vi 进阶应用................................................................................................... 320 B.3.1 移动光标 ............................................................................................. 320 B.3.2 进阶编辑命令 ...................................................................................... 322 B.3.3 文件命令 ............................................................................................. 322 附录 C Linux 下 C 语言使用与调试简介 ...................................................................... 324 C.1 C 语言编程 ................................................................................................... 324 C.2 什么是 C? ..................................................................................................... 324 C.3 GNU C 编译器............................................................................................... 324 C.3.1 使用 GCC ............................................................................................ 324 C.3.2 GCC 选项 ............................................................................................ 325 C.3.3 优化选项 ............................................................................................. 325 C.3.4 调试和剖析选项................................................................................... 325 C.3.5 用 gdb 调试 GCC 程序.......................................................................... 326 C.4 另外的 C 编程工具 ........................................................................................ 330 C.4.1 Xxgdb.................................................................................................. 330 C.4.2 Calls .................................................................................................... 331 C.4.3 cproto .................................................................................................. 332 C.4.4 Indent .................................................................................................. 333 C.4.5 Gprof................................................................................................... 334 C.4.6 f2c 和 p2c ............................................................................................ 335 附录 D Ping 源码 ........................................................................................................ 336 附录 E TFTP 服务器程序源码 ..................................................................................... 362
精通Windows Sockets网络开发——基于Visual C++实现 目 录 第1篇网络开发基础篇 第1章准备开发环境 1.1windows sockets开发概述 1.1.1网络程序开发应用 1.1.2网络程序结构——c/s、b/s 1.1.3网络程序通信基础——网络协议 1.1.4网络程序通信技术——windows sockets介绍 1.2连接网络 1.2.1tcp/ip设置 1.2.2tcp/ip是否工作正常 1.2.3系统与网络适配器间的通信 1.2.4默认网关 1.2.5ping其他计算机ip地址 1.3创建应用程序 1.3.1控制台程序 1.3.2mfc应用程序 1.4调试两个应用程序 1.4.1启动两个工程 1.4.2将一个工程加入到另一个工程空间 1.5配置开发环境 1.6小结 第2章tcp/ip简介 2.1开放系统互连参考模型 2.2tcp/ip协议概述 2.2.1tcp/ip模型 2.2.2udp 2.2.3tcp 2.2.4端口 2.3小结 第3章windows sockets基础 3.1windows sockets 3.1.1应用程序与windows sockets的关系 3.1.2套接字 3.2协议特征 3.2.1面向连接与面向无连接 3.2.2可靠性与次序性 3.2.3面向消息 3.2.4部分消息 3.2.5从容关闭 3.2.6路由选择 3.2.7广播数据 3.3ip定址 3.3.1ip定址 3.3.2字节顺序问题 3.4基本tcp套接字编程 3.4.1wsastartup()函数 3.4.2socket()函数 3.4.3bind()函数 3.4.4listen()函数 3.4.5accept()函数 3.4.6recv()函数 3.4.7send()函数 3.4.8closesocket()函数 3.4.9shutdown()函数 3.4.10connect()函数 3.5tcp示例程序 3.5.1服务器实现 3.5.2客户端实现 3.6基本udp套接字编程 3.6.1recvfrom()函数 3.6.2sendto()函数 3.7udp示例程序 3.7.1服务器实现 3.7.2客户端实现 3.8套接字选项41 3.8.1getsockopt()函数 3.8.2setsockopt()函数 3.8.3sol_socket选项级别 3.9小结 第2篇visual c++网络模式开发篇 第4章阻塞模式开发 第5章非阻塞模式开发 第6章select模型开发 第7章wsaasyncselect模型开发 第8章wsaeventselect模型开发 第9章重叠i/o模型开发 第10章完成端口模型开发
学习.NET Socket编程的好书,资源包含Word版电子书(201页完整版),源代码,PPT,习题解答,史上最全。 目录-------------------------------------------------------- 前 言 6 第1章 进程、线程与网络协议 7 1.1 进程和线程 7 1.1.1 Process类 7 1.1.2 Thread类 9 1.1.3 在一个线程中操作另一个线程的控件 13 1.2 IP地址与端口 15 1.2.1 TCP/IP网络协议 16 1.2.2 IPAddress类与Dns类 17 1.2.3 IPHostEntry类 17 1.2.4 IPEndPoint类 17 1.3 套接字 19 1.3.1 Socket类 20 1.3.2 面向连接的套接字 21 1.3.3 无连接的套接字 23 1.4 网络流 24 1.5 习题1 25 第2章 TCP应用编程 27 2.1 同步TCP应用编程 28 2.1.1 使用套接字发送和接收数据 28 2.1.2 使用NetworkStream对象发送和接收数据 30 2.1.3 TcpClient与TcpListener类 31 2.1.4 解决TCP协议的无消息边界问题 33 2.2 利用同步TCP编写网络游戏 34 2.2.1 服务器端编程 34 2.2.2 客户端编程 49 2.3 异步TCP应用编程 66 2.3.1 EventWaitHandle类 67 2.3.2 AsyncCallback委托 69 2.3.3 BeginAcceptTcpClient方法和EndAcceptTcpClient方法 70 2.3.4 BeginConnect方法和EndConnect方法 70 2.3.5 发送数据 71 2.3.6 接收数据 72 2.4 异步TCP聊天程序 73 2.4.1 服务器端设计 73 2.4.2 客户端设计 79 2.5 习题2 83 第3章 UDP应用编程 84 3.1 UDP协议基础知识 84 3.2 UDP应用编程技术 84 3.2.1 UdpClient类 84 3.2.2 发送和接收数据的方法 86 3.3 利用UDP协议进行广播和组播 90 3.3.1 通过Internet实现群发功能 90 3.3.2 在Internet上举行网络会议讨论 96 3.4 习题3 101 第4章 P2P应用编程 102 4.1 P2P基础知识 102 4.2 P2P应用举例 104 4.3 习题4 114 第5章 SMTP与POP3应用编程 115 5.1 通过应用程序发送电子邮件 115 5.1.1 SMTP协议 115 5.1.2 发送邮件 116 5.2 利用同步TCP接收电子邮件 120 5.2.1 POP3工作原理 121 5.2.2 邮件接收处理 123 5.3 习题5 127 第6章 网络数据加密与解密 128 6.1 对称加密 128 6.2 不对称加密 133 6.3 通过网络传递加密数据 136 6.4 Hash算法与数字签名 152 6.5 习题6 153 第7章 三维设计与多媒体编程 154 7.1 简单的3D设计入门 154 7.2 DirectX基础知识 160 7.2.1 左手坐标系与右手坐标系 160 7.2.2 设备 160 7.2.3 顶点与顶点缓冲 161 7.2.4 Mesh对象 162 7.2.5 法线 162 7.2.6 纹理与纹理映射 162 7.2.7 世界矩阵、投影矩阵与视图矩阵 162 7.2.8 背面剔除 164 7.3 Primitive 164 7.4 Mesh 171 7.5 灯光与材质 177 7.6 音频与视频 187 7.7 直接使用SoundPlayer类播放WAV音频文件 191 7.8 习题7 193 第8章 上机实验指导 194 8.1 实验一 简单网络聊天系统 194 8.2 实验二 网络呼叫应答提醒系统 195 8.3 实验三 文件数据加密与解密 199

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧