这门课补的是哪一块

写过 C/C++,也能在 Windows 上编译运行程序,但一碰到「两台机器之间怎么把数据传过去」就卡住——这是很多人真实的能力缺口。平时调库调惯了,遇到连接建不起来、数据收不全、程序一关就报错,只能靠搜。Windows 网络编程这门课,针对的就是这个断层:不是教你背 API,而是把从套接字创建到数据往返的整条链路讲清楚。

它默认你已经会写 C/C++,也熟悉 Windows 下的开发环境,所以不会花篇幅讲语法和 IDE 操作,直接进入网络编程本身。如果你连指针、内存管理都还不熟,先补这部分再来,否则后面会越听越吃力。

学之前先自测几个问题

下面这些问题,如果你有一半答不上来,说明这门课正好对你:

  • socket()、bind()、listen()、accept() 各自解决什么问题,顺序能不能调换?
  • 阻塞和非阻塞套接字在代码里表现有什么不同,为什么服务端常用多线程或多路复用?
  • TCP 的粘包是怎么回事,为什么 send 一次不代表对方 recv 一次?
  • 字节序为什么要在网络编程里单独处理,htonl 和 ntohl 分别在什么时候用?
  • 客户端主动关闭和服务端主动关闭,对两端代码的影响一样吗?

这些不是面试题,而是你写代码时一定会撞上的坎。课程的内容基本围绕它们展开。

会动手做什么

课程走的是边讲边练的路子,理论部分讲清楚协议和接口的设计意图,练习部分让你真的把代码跑起来。典型的练习包括:写一个能接受多个连接的 TCP 服务端,处理数据的收发与拼接;写对应的客户端并验证双方交互;观察阻塞调用在什么情况下会卡住,再用多线程或多路复用改进。过程中你会反复遇到错误码,学会看 WSAGetLastError 的返回值去定位问题,而不是靠猜。

UDP 部分同样有对照练习,让你直观感受到「无连接」在代码层面意味着什么,以及它和 TCP 在使用场景上的差别。这些动手环节的目的不是凑代码量,而是让底层的机制变成你调试时的直觉。

看完应该能回答的问题

学完之后,你至少应该能独立回答:一个完整的 TCP 连接从建立到断开,两端各自经历了哪些状态和调用?为什么服务端要区分监听套接字和连接套接字?数据在缓冲区里怎么流动,什么时候需要自己处理分包?出现「连接被重置」或「地址已在使用」这类报错,通常该往哪个方向查?

更重要的是,你得能把这些答案落到代码上——不是复述概念,而是打开编辑器就能写出可运行、可调试的网络程序。如果学完还停留在「知道有这么个函数」,那说明练得不够,回头把练习重做一遍比继续往后看更有用。

Windows 网络编程

课程详情

课程标题:Windows 网络编程

本课程旨在帮助学员掌握使用Windows Socket进行网络数据交换的技能,并深入理解网络编程的底层机制。

适合人群

  • 具有一定C/C++基础的学员
  • 熟悉Windows编程环境的学员

学习收获

  • 熟练使用Windows Socket进行网络编程
  • 深入理解网络编程的底层原理
  • 提升网络应用开发能力

课程亮点

  • 理论与实践相结合,注重实际操作能力培养
  • 系统讲解网络编程的核心概念和技术
  • 提供丰富的案例和练习,巩固学习成果

课程目录

01 网络简介
  01 网络简介(一)
  02 网络简介(二)
  03 网络简介(三)
  04 网络简介(四)
  05 网络简介(五)
  06 网络简介(六)
  07 网络特性
02 socket基础
  01 TCP的服务端
  02 TCP/UDP客户端以及UDP服务端
  03 列举计算机中安装的协议
  04 socket基本函数介绍
  05 获取网络IP地址
03 socket编程模型
  01 阻塞方式服务端程序
  02 select模式
  03 窗口模式的select
  04 EventSelect模式
  05 问题解决
  06 事件内核对象处理socket上的IO操作
  07 完成例程
  08 完成端口
  09 扩展函数
  10 其他扩展函数
04 QOS和NetBios
  01 QOS简介
  02 NetBios基础
  03 阻塞模式服务端程序示例
  04 NetBiso编程
  05 网络命名空间(DNS)
05 网络命令Ping和Ipconfig
  01 ipconfig(一)
  02 ipconfig(二)
  03 网络工具
  04 ping命令
  05 Tracert-traceroute命令
06 WSAIoctl和SockOpt
  01 socket选项
  02 WSAIoCtl
07 多播命名管道和邮槽
  01 多播(一)
  02 多播(二)
  03 邮槽
  04 命名管道
08 RPC编程
  01 rpc_1
  02 Rpc_2
  03 Rpc_3