
前面写的程序都是 自己跟自己玩。真实的应用要联网—— 浏览器请求网页、聊天软件收发消息、爬虫抓数据。这篇老哥带你打通网络编程。一、网络编程三要素进程之间要通信靠三个东西协议定义通信规则数据格式、传输顺序、错误检查IP网络中每台计算机的唯一标识靠它找到计算机端口标识进程的逻辑地址靠它找到计算机里指定的进程。二、TCP/IP 协议与分层模型TCP/IP是互联网最常用的协议族得名于两个核心协议TCP传输控制协议和IP网际协议。理解网络用五层模型TCP/IP 四层 把网络接口层拆成数据链路层和物理层应用层 HTTP、FTP、SMTP 等 传输层 TCP、UDP 网络层 IP 数据链路层 物理层三、IP标识设备、寻址用ipconfigWindows/ifconfigLinux查看本机 IP。公网 IP任何地方能访问私网 IP只能在局域网内访问范围10.0.0.0 ~ 10.255.255.255172.16.0.0 ~ 172.31.255.255192.168.0.0 ~ 192.168.255.255127.0.0.1是回环地址代表本机。IPv432 位如192.168.10.2IPv6128 位如2001:db8:0:1234:0:567:8:1。IPv4 地址 2011 年已耗尽IPv6 地址多到 每粒沙子都能有 IP。四、端口找到进程端口号范围0~65535公认端口0~1023绑定系统服务80HTTP、21FTP、22SSH、3306MySQL、3389RDP动态端口1024~65535进程动态申请关闭即释放。用netstat -ano查看端口信息。五、socket进程通信的工具socket套接字是进程间通信的工具。Python 用socket模块创建import socket # TCP 流式套接字 tcp_socket socket.socket(familysocket.AF_INET, typesocket.SOCK_STREAM) # UDP 数据报套接字 udp_socket socket.socket(familysocket.AF_INET, typesocket.SOCK_DGRAM)AF_INET用于 Internet 进程间通信SOCK_STREAMTCP 流式SOCK_DGRAMUDP 数据报。六、UDP不可靠但快UDP简单、面向数据报、不保证可靠发出去就不留备份。适合对时效要求高、能容忍丢包的场景流媒体、在线游戏。UDP 服务端import socket udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM) udp_socket.bind((127.0.0.1, 8080)) # 绑定 IP 和端口 while True: recv_data, client_addr udp_socket.recvfrom(1024) # 接收 print(f{client_addr[0]}:{client_addr[1]} {recv_data.decode(utf-8)}) udp_socket.sendto(你好.encode(utf-8), client_addr) # 发送 udp_socket.close()UDP 客户端import socket udp_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: try: server_ip, server_port 127.0.0.1, 8080 udp_socket.sendto(input(f{server_ip}:{server_port} ).encode(utf-8), (server_ip, server_port)) recv_data, client_addr udp_socket.recvfrom(1024) print(f{client_addr[0]}:{client_addr[1]} {recv_data.decode(utf-8)}) except KeyboardInterrupt: break udp_socket.close()先跑服务端再跑客户端就能聊天了。七、TCP可靠但需连接TCP面向连接、可靠、基于字节流分建立连接→数据传送→终止连接三阶段用序号、校验和、确认重传等机制保证可靠。适合网页、文件传输等不能丢数据的场景。TCP 服务端多了listen和acceptimport socket tcp_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.bind((127.0.0.1, 8080)) tcp_socket.listen(2) # 设置监听 client_socket, client_addr tcp_socket.accept() # 等待连接 while True: recv_data client_socket.recv(1024) print(f{client_addr[0]}:{client_addr[1]} {recv_data.decode(utf-8)}) client_socket.send(你好.encode(utf-8)) tcp_socket.close()TCP 客户端多了connectimport socket tcp_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM) tcp_socket.connect((127.0.0.1, 8080)) # 连接服务器 while True: try: tcp_socket.send(input(127.0.0.1:8080 ).encode(utf-8)) recv_data tcp_socket.recv(1024) print(f127.0.0.1:8080 {recv_data.decode(utf-8)}) except KeyboardInterrupt: break tcp_socket.close()八、HTTP网页的通信语言HTTP超文本传输协议是应用层协议万维网数据通信的基础。客户端发请求服务器返回响应。请求消息四部分请求行方法 URI 版本、请求头、空行、请求体。响应消息四部分状态行版本 状态码 状态信息、响应头、空行、响应体。八种请求方法GET读资源、HEAD只要元信息、POST提交数据、PUT上传内容、DELETE删除资源、TRACE、OPTIONS、CONNECT。五类状态码1xx信息100 继续、101 切换协议2xx成功200 OK、202 已接受3xx重定向301 永久移动、302 临时移动、304 未修改4xx客户端错误400 语法错误、403 拒绝、404 找不到、405 方法被禁止5xx服务器错误500 内部错误、502 网关错误。发 HTTP 请求拿数据用 requests 库import requests url https://international.v1.hitokoto.cn/ params {c: a, encode: json} # 一言网的 API try: response requests.get(url, paramsparams) status_code response.status_code if status_code 200: data response.json() hitokoto data[hitokoto] from_who data[from_who] if data[from_who] else 未知 print(f随机名言: {hitokoto} - {from_who}) elif status_code 404: print(请求的资源未找到) elif status_code 500: print(服务器内部错误) else: print(f发生未知错误状态码: {status_code}) except requests.RequestException as e: print(f请求过程中出现错误: {e})老哥收尾网络编程一句话三要素协议 / IP / 端口TCP 可靠要连接、UDP 快但不稳socket 建套接字服务端 bindlistenaccept、客户端 connectHTTP 请求响应、8 种方法、5 类状态码。下一篇讲正则表达式—— 从文本里精准 抠 出想要的内容。有问题随时回来找老哥。