左雪菲的专栏

欢迎加入高性能服务器开发交流群:578019391

网络通信基础重难点解析 18: IOCP实例 - gh0st源码分析(以网络通信模块为重点)

上一小节,我们介绍了 Windows 系统上最强大的网络通信模型——完成端口模型(IOCP),但是只停留于一些用法介绍和理论讲解,这一节我们以 gh0st 这一曾经大名顶顶的远程控制软件的实战一下,我这个版本的 gh0st 网络通信模型使用的正是 IOCP 。由于,本小节的目的是为了演示前面各个章...

2019-03-21 18:40:33

阅读数 102

评论数 0

网络通信基础重难点解析 17 :Windows 完成端口(IOCP)模型重难点解析

Windows 完成端口(IOCP)模型重难点解析 本人很多年前接触完成端口以来,期间学习和练习了很多次,本以为自己真正地理解了其原理,最近在看网狐的服务器端源码时又再一次拾起完成端口的知识,结果发现以前理解的其实很多偏差,有些理解的甚至都是错误的。网络上关于windows完成端口的介绍举不胜举,...

2019-03-21 18:30:51

阅读数 30

评论数 0

网络通信基础重难点解析 16 :域名解析 API 介绍

为了便于记忆,有时候我们需要我们的程序可以使用域名和端口号去连接服务,这种情况下,我们需要使用 socket API gethostbyname 函数先把域名转换成 ip 地址,再使用 connect 函数连接。在 Linux 系统上, gethostbyname 函数的签名如下: #includ...

2019-03-21 18:01:01

阅读数 78

评论数 0

网络通信基础重难点解析 15 :主机字节序和网络字节序

主机字节序和网络字节序 主机字节序 网络通信本质上是不同的机器进行数据交换,一般不同的机器有着不同的 CPU 型号,不同的 CPU 其字节序可能不一样。所谓字节序指的是对于存储需要多个字节(大于 1 字节)的整数来说,其每个字节在不同的机器内存中存储的顺序。这就是所谓的主机字节序,一般分为两类: ...

2019-03-21 17:59:52

阅读数 24

评论数 0

网络通信基础重难点解析 14 :Windows 的 WSAAsyncSelect 网络通信模型

Windows 的 WSAAsyncSelect 网络通信模型 **WSAAsyncSelect ** 是 Windows 系统非常常用一个网络通信模型,它的原理是将 socket 句柄绑定到一个 Windows 窗口上并利于 Windows 的窗口消息机制实现了网络有消息时调用窗口函数。**WS...

2019-03-21 17:58:22

阅读数 30

评论数 0

网络通信基础重难点解析 13 :Windows WSAEventSelect 网络通信模型

Windows WSAEventSelect 网络通信模型 WSAEventSelect 网络通信模型是 Windows 系统上常用的一种异步 socket 通信模型,下面来详细介绍下其用法。 WSAEventSelect 用于服务器端 我们先从服务器端来看这个模型,在 Windows 系统上正常...

2019-03-21 17:56:27

阅读数 38

评论数 0

网络通信基础重难点解析 12 :Linux epoll 模型

Linux epoll 模型 综合 select 和 poll 的一些优缺点,Linux 从内核 2.6 版本开始引入了更高效的 epoll 模型,本节我们来详细介绍 epoll 模型。 要想使用 epoll 模型,必须先需要创建一个 epollfd,这需要使用 epoll_create 函数去创...

2019-03-21 17:53:15

阅读数 21

评论数 0

网络通信基础重难点解析 11 :Linux poll 函数用法

Linux poll 函数用法 poll 函数用于检测一组文件描述符(File Descriptor, fd)上的可读可写和出错事件,其函数签名如下: #include <poll.h> int poll(struct pollfd* fds, nfds_t nfds...

2019-03-21 17:51:42

阅读数 55

评论数 0

网络通信基础重难点解析 10 :Linux EINTR 错误码

Linux EINTR 错误码 在类 Unix 操作系统中(当然也包括 Linux 系统),当我们调用一些 socket 函数时(connect、send、recv、epoll_wait 等),除了函数调用出错会返回 -1,这些函数可能被信号中断也会返回 -1,此时我们可以通过错误码 errno ...

2019-03-21 17:43:24

阅读数 17

评论数 0

网络通信基础重难点解析 09 :阻塞与非阻塞的 socket 的各自适用场景

阻塞与非阻塞的 socket 的各自适用场景 阻塞的 socket 函数在调用 send、recv、connect、accept 等函数时,如果特定的条件不满足,就会阻塞其调用线程直至超时,非阻塞的 socket 恰恰相反。这并不意味着非阻塞模式的 socket 模式比阻塞模式的 socket 模...

2019-03-21 17:42:10

阅读数 16

评论数 0

网络通信基础重难点解析 08 :connect 函数在阻塞和非阻塞模式下的行

connect 函数在阻塞和非阻塞模式下的行为 在 socket 是阻塞模式下 connect 函数会一直到有明确的结果才会返回(或连接成功或连接失败),如果服务器地址“较远”,连接速度比较慢,connect 函数在连接过程中可能会导致程序阻塞在 connect 函数处好一会儿(如两三秒之久),虽...

2019-03-21 17:40:29

阅读数 27

评论数 0

网络通信基础重难点解析 07 :非阻塞模式下 send 和 recv 函数的返回值总结

非阻塞模式下 send 和 recv 函数的返回值总结 我们来根据前面的讨论来总结一下 send 和 recv 函数的各种返回值意义: 返回值 n 返回值含义 大于 0 成功发送 n 个字节 0 对端关闭连接 小于 0( -1) 出错或者被信号中断或者对端 TCP 窗口太小...

2019-03-21 17:37:37

阅读数 29

评论数 0

网络通信基础重难点解析 06 :send 和 recv 函数在阻塞和非阻塞模式下的行为

send 和 recv 函数在阻塞和非阻塞模式下的行为 send 和 recv 函数其实名不符实。 send 函数本质上并不是往网络上发送数据,而是将应用层发送缓冲区的数据拷贝到内核缓冲区(下文为了叙述方便,我们以“网卡缓冲区”代指)中去,至于什么时候数据会从网卡缓冲区中真正地发到网络中去要根据 ...

2019-03-21 17:34:19

阅读数 42

评论数 0

网络通信基础重难点解析 05 :socket 的阻塞模式和非阻塞模式

socket 的阻塞模式和非阻塞模式 对 socket 在阻塞和非阻塞模式下的各个函数的行为差别深入的理解是掌握网络编程的基本要求之一,是重点也是难点。 阻塞和非阻塞模式下,我们常讨论的具有不同行为表现的 socket 函数一般有如下几个,见下表: connect accept send (Li...

2019-03-21 17:30:26

阅读数 30

评论数 0

网络通信基础重难点解析 04 :select 函数原理及重难点解析

select 函数用法 select 函数是网络通信编程中非常常用的一个函数,因此应该熟练掌握它。虽然它是 BSD 标准之一的 Socket 函数之一,但在 Linux 和 Windows 平台,其行为表现还是有点区别的。我们先来看一下 Linux 平台上的 select 函数。 Linux 平台...

2019-03-21 17:27:13

阅读数 146

评论数 0

网络通信基础重难点解析 03:bind 函数难点解析

bind 函数如何选择绑定地址 上一节的服务器代码中演示了 bind 函数的使用方法,让我们再看一下相关的代码: struct sockaddr_in bindaddr; bindaddr.sin_family = AF_INET; bindaddr.sin_addr.s_addr = htonl...

2019-03-21 17:20:11

阅读数 85

评论数 0

网络通信基础重难点解析 02:TCP 通信基本流程

TCP 通信基本流程 不管多么复杂的服务器或客户端程序,其网络通信的基本原理一定如下所述: 对于服务器,其通信流程一般有如下步骤: 1. 调用 socket 函数创建 socket(侦听socket) 2. 调用 bind 函数 将 socket绑定到某个ip和端口的二元组上 3. 调用 list...

2019-03-21 17:17:30

阅读数 65

评论数 0

网络通信基础重难点解析 01:常用 socket 函数基础

网络通信基础重难点解析 01:常用 socket 函数基础 常用 socket 函数基础 Windows 和 Linux 上常用的 socket API 函数并不多,除了特定操作系统提供的一些基于自身系统特性的 API, 大多数 Socket API 都源于BSD Socket (即伯克利套接字(...

2019-03-21 17:13:59

阅读数 87

评论数 0

网络通信基础重难点解析 专题介绍

网络通信基础重难点解析 专题介绍 不积跬步无以至千里,不积小流无以成江海。 当我们了解了网络通信的基本原理后,你需要实际去编写一些网络通信程序,随着技术的更新换代、大浪淘沙,目前主要的网络通信技术都是基于 TCP/IP 协议栈的,对应到应用层的编码来说就是使用操作系统提供的 socket API ...

2019-03-21 16:53:00

阅读数 108

评论数 0

Windows 一些常用到的文件路径相关的API

Path API 需要头文件:shlwapi.h 其中有一些函数功能存在重复,我在认为比较常用的的函数上加红。 BOOL PathFileExists(LPCTSTR lpszPath) 功能:检查文件/路径是否存在 LPTSTR PathFindFileName(LPCTSTR pPath) ...

2019-01-28 17:36:01

阅读数 130

评论数 0

提示
确定要删除当前文章?
取消 删除