
网络编程
文章平均质量分 80
浅慕Antonio
分享编程知识
展开
-
【网络编程】HTTP网络编程
HTTP(Hyper Text Transfer Protocol,超文本传输协议)是用于从万维网(WWW:World Wide Web) 服务器(简称Web 服务器)传输超文本到本地浏览器的传送协议,基于TCP/IP 通信协 议来传递数据 (HTML 文件、图片文件、查询结果等)。原创 2025-03-11 12:04:59 · 1202 阅读 · 0 评论 -
【网络编程】完成端口 IOCP
执行一个文件的I/O 操作处理具有关联的I/O 完成端口,在I/O 操作完成时I/O 系统发送 完成通知包到完成端口。其次,我们需要知道,所谓的完成端口其实和 HANDLE 一样,也是一个内核对象, Windows 大师Jeff Richter曾说,“完成端口可能是最为复杂的内核对象了”,但是我们也不 用去管它复杂,因为具体的内部是如何实现的和我们无关,只要我们能够学会用它相关的API 把这个完成端口的框架搭建起来就可以了。然而,当一个事件发生的时候,此完成端口就将被操作系统加入一个队列中。原创 2025-03-10 22:02:03 · 688 阅读 · 0 评论 -
【网络编程】重叠I/O模型
在 Winsock 中,重叠 I/O(Overlapped I/O) 模型能达到更佳的系统性能,高于 select 模 型、异步选择和事件选择3种。重叠模型的基本设计原理便是让应用程序使用一个重叠的数据 结 构(WSAOVERLAPPED), 一次投递一个或多个 Winsock I/O 请求。针对这些提交的请求, 在它们完成之后,我们的应用程序会收到通知,于是我们就可以对数据进行处理了。重叠I/O 这个概念来自文件I/O 操作。原创 2025-03-09 23:41:13 · 653 阅读 · 0 评论 -
【网络编程】事件选择模型
事件选择(WSAEventSelect) 模型是另一个有用的异步 I/O 模型。和 WSAAsyncSelect 模 型类似的是,它也允许应用程序在一个或多个套接字上接收以事件为基础的网络事件通知,最 主要的差别在于网络事件会投递至一个事件对象句柄,而非投递到一个窗口例程。原创 2025-03-09 21:30:27 · 841 阅读 · 0 评论 -
【网络编程】WSAAsyncSelect 模型
这也是该模型的一个缺点。(5)为一个FD_READ网络事件不要多次调用recv(函数,如果应用程序为一个FD_READ 网络事件调用多个recv()函数,就会使得该应用程序收到多个FD_READ 网络事件。Windows sockets应用程序在 创建套接字后,调用WSAAsyncSelect 函数注册感兴趣的网络事件,当该事件发生时Windows 窗口收到消息,应用程序就可以对接收到的网络事件进行处理了。尽管应用程序调用上述函数取消了网络事件通知,但是在应用程序消息队列中,可能还有 网络消息在排队。原创 2025-03-09 17:20:57 · 885 阅读 · 0 评论 -
【网络编程】select模型
我们把监听套接字sListen 放到fdSocket 集合中,但然后阻塞在select 函数,当有请求连 接的时候,select 函数返回,然后调用accept 接受连接,并把客户套接字放到fdSocket 集合中。在调用select 函 数 时 ,readfds 、writefds 和 exceptfds 这3个参数至少有一个为非空,并且 在该非空的参数中,必须至少包含一个套接字,否则select 函数将没有任何套接字可以等待。前面提到,在select函数返回时会在fd set结构中填入相应的套接字。原创 2025-03-09 16:09:12 · 961 阅读 · 0 评论 -
【网络编程】同步和异步、阻塞和非阻塞,I/O和网络I/O
对于多个线程而言,同步、异步就是线程间的步调是否要一致、是否要协调:要协调线程 之间的执行时机就是线程同步,否则就是异步。对于一个线程的请求调用来讲,同步和异步的区别是是否要等这个请求出最终结果(注意, 不是请求的响应,是提交的请求最终得到的结果)。如果要等最终结果,就是同步;如果不等, 干其他无关事情了,就是异步。原创 2025-03-08 17:08:38 · 912 阅读 · 0 评论 -
【网络编程】简单的网络服务器设计
不同于客户端程序,服务器端程序需要同时为多个客户端提供服务,及时响应。比如Web 服务器,就要能同时处理不同IP 地址的主机发来的浏览请求,并把网页及时反应给浏览器。因此,开发服务器程序,必须要能实现并发服务能力。这是网络服务器之所以成为服务器的最 本质的特点。这里要注意,有些并发并不是非常需要精确同时。在某些应用场合,比如每次处理客户端 数据量较少的情况下,我们也可以简化服务器的设计。通常来讲,网络服务器的设计模型有循 环服务器、I/O 复用服务器、多线程并发服务器。原创 2025-03-08 15:59:21 · 796 阅读 · 0 评论 -
【网络编程】原始套接字编程
在前两次复制的过程中,不是所有网卡的数据都会复制过去,而是有条件、有选择的,第三次 复制通常是无条件复制。对于第一次复制,协议栈通常会对下列IP 数据包进行复制:(1)UDP 分组或TCP 分组。(2)部分ICMP 分组。注意是“部分”,大家待会会看到这个效果。默认情况下,原始 套接字抓不到ping 包。(3)所有IGMP 分组。(4)IP 首部的协议字段不被协议栈认识的所有IP 包。(5)重组后的IP 分片。原创 2025-03-08 13:31:07 · 768 阅读 · 0 评论 -
【网络编程】UDP 套接字编程
UDP 套接字就是数据报套接字, 一种无连接的Socket,对应于无连接的UDP 应用。在使 用TCP 编写的应用程序和使用UDP 编写的应用程序之间存在一些本质差异,其原因在于这两 个传输层之间的差别:UDP 是无连接不可靠的数据报协议,不同于TCP 提供的面向连接的可 靠字节流。从资源的角度来看,相对来说UDP 套接字开销较小,因为不需要维持网络连接, 而且无须花费时间来连接,所以UDP 套接字的速度较快。因为UDP 提供的是不可靠服务,所以数据可能会丢失。原创 2024-12-14 16:32:50 · 682 阅读 · 0 评论 -
【网络编程】TCP套接字编程
流式套接字编程针对的是TCP 协议通信,即面向连接的通信,分为服务器端和客户端两 个部分,分别代表两个通信端点。下面看一下流式套接字编程的基本步骤。(1)加载套接字库(使用函数WSAStartup), 创建套接字(使用socket)。(2)绑定套接字到一个IP 地址和一个端口上(使用函数bind)。(3)将套接字设置为监听模式等待连接请求(使用函数listen), 这个套接字就是监听套 接字了。(4)请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept)。原创 2024-12-10 00:18:18 · 1046 阅读 · 0 评论 -
【网络编程】套接字基础
Windows用户态的网络编程常见的应用主要基于套接字API。套 接 字API 是 Windows提 供的一组网络编程接口。通过它,开发人员既可以在传输层之上进行网络编程,也可以跨越传 输层直接对网络层进行开发。套接字 API 已经是用户态网络编程必须要掌握的内容。套接字 编程可以分为TCP 套接字编程、UDP 套接字编程和原始套接字编程,我们将在后面章节分别 叙述之。原创 2024-12-07 12:22:26 · 848 阅读 · 0 评论 -
【多线程编程】利用Win32API函数进行多线程开发
在用Win32 API线程函数进行开发之前,我们首先要熟悉这些API 函数。常见的与线程 有关的API 函数见表3-2。原创 2024-12-07 01:25:14 · 972 阅读 · 0 评论 -
【多线程编程】多线程编程的基本概念
怎么解决这个问题呢?现代操作系统大多支持多线程概念,每个进程中至少有一个线程,所以即使没有使用多线程编程技术,进程也含有一个主线程,所以也可以说,CPU中执行的是线程,线程是程序的最小执行单位,是操作系统分配CPU时间的最小实体。线程和进程的关系是:线程是属于进程的,线程运行在进程空间内,同一进程所产生的线程共享同一内存空间,当进程退出时该进程所产生的线程都会被强制退出并清除。该类别被称为空闲优先级类别,该类别的进程中的线程只在系统处于空闲的时候才运行,并且这些线程会被更高优先类别的进程中的线程抢占。原创 2024-12-06 21:22:08 · 919 阅读 · 0 评论 -
【网络编程】获取本机计算机的域名
其中,参数pFixedInfo指向一个缓冲区的指针,该缓冲区包含一个固定的信息结构,该结构接收本地计算机的网络参数(如果函数成功),调用GetNetworkParams函数之前,调用方必须分配正确大小的缓冲区才会获得内容信息,如果该参数为NULL,那么pOutBufLen能获得实际所需要的缓冲区大小;如果函数失败,返回值是错误代码。域名(Domain Name)或称网域,是由一串用点分隔的名字组成的Internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(或物理位置)。原创 2024-12-04 08:41:31 · 265 阅读 · 0 评论 -
【网络编程】获取本机上支持的网络协议信息
IpdwBuferLength在输入时,传递给WSAEnumProticol的IpProtocolBuffer缓冲区的字节数。输出时,可以传递给WSAEnumProtocols以检索所有请求信息的最小缓冲区大小。如果函数没有出现错误,WSAEnumeProtocols将返回要报告的协议数;否则将返回SOCKET_ERROR的值,并且可以通过调用WSAGetLastError来检索特定的错误代码。可以通过函数WSAEnumeProtocols检索有关可用网络传输协议的信息。原创 2024-12-04 08:35:06 · 350 阅读 · 0 评论 -
【网络编程】获取本机上的UDP统计数据
其中,参数pStats指向MIB_UDPSTATS结构的指针,该结构接收本地计算机的UDP统计信息。如果函数成功,返回NO_ERROR;原创 2024-12-04 01:28:58 · 188 阅读 · 0 评论 -
【网络编程】获取本机上的TCP统计数据
其中,参数pStats指向MIB_TCPSTATS结构的指针,该结构接收本地计算机的TCP统计信息。如果函数成功,返回NO_ERROR;原创 2024-12-04 01:24:12 · 228 阅读 · 0 评论 -
【网络编程】获取本机的DNS地址
其中,参数pFixedInfo指向一个缓冲区的指针,该缓冲区包含一个固定的信息结构,该结构接收本地计算机的网络参数(如果函数成功)。pOutBufLen指向一个ULONG变量的指针,该变量指定固定信息结构的大小。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。当前,对于每一级的域名长度的限制是63个字符,域名总长度则不能超过253个字符。DNS是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便地访问互联网,而不用去记住能够被机器直接读取的IP数串。原创 2024-12-04 01:16:04 · 214 阅读 · 0 评论 -
【网络编程】获取本地计算机的IP协议统计数据
其中,参数pStats指向MIB_IPSTATS结构的指针,该结构接收本地计算机的IP统计信息。如果函数成功,返回值为NO_ERROR。GetIpStatistics函数返回当前计算机上IPv4的统计信息。如果还需要获得IPv6的IP统计信息,可以使用扩展函数GetIpStatisticsEx。通过函数GetIpStatistics可以获取当前主机的IP协议的统计数据,比如已经收到了多少个数据包。原创 2024-12-04 00:58:55 · 285 阅读 · 0 评论 -
【网络编程】获取本机所有网卡(包括虚拟网卡)的列表和信息
博客中介绍了GetAdaptersInfo这个函数,并且通过它获取了本机的子网IP和子网掩码。原创 2024-12-04 00:48:16 · 318 阅读 · 0 评论 -
【网络编程】获取本机子网IP地址和子网掩码
子网掩码(subnet mask)又叫做网络掩码,地址掩码,用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是计算机的为掩码。子网掩码不能单独存在,必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分为网络地址和主机地址两部分。原创 2024-12-04 00:30:53 · 428 阅读 · 0 评论 -
【网络编程】获取本地计算机的名称和IP
俗话说,千里之行,始于足下。网络编程也要从认识自己的电脑网络信息开始。本章将对常见的本机网络信息进行阐述。本章不难,主要是一些函数的使用。所有的本机网络信息都是通过调用Win32API函数获得的。原创 2024-12-04 00:14:18 · 644 阅读 · 0 评论 -
【网络编程】TCP/IP协议基础
TCPIPTCP/IPTCPIPTCPIPTCP/IPTCPIP是TransmissionControlProtocolnternetProtocolTransmissionControlProtocolnternetProtocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通信协议,是Inter。原创 2024-12-02 14:30:22 · 660 阅读 · 0 评论