网络编程-创建SOCKET套接字

socket(AF_INET, SOCK_STREAM, 0) 超详细解释

这行代码是网络编程(TCP通信)的核心起点 ,作用是:在操作系统中创建一个「网络套接字(Socket)」,相当于给程序开了一个「网络通信的接口」,后续所有发送/接收数据、建立连接都靠它。

我会把三个参数返回值底层作用实际用途一次性讲透,新手也能完全看懂。


完整语法

python 复制代码
# Python 写法(其他语言C/Java/Go逻辑完全一致)
import socket
s = socket.socket(AF_INET, SOCK_STREAM, 0)

函数原型通用逻辑:

c 复制代码
int socket(int domain, int type, int protocol);

三个参数逐行拆解

1. 第一个参数:AF_INET(地址族/协议簇)

全称:Address Family - Internet

  • 含义:指定使用 IPv4 网络协议
  • 作用:告诉操作系统,这个套接字用于互联网通信(IP地址+端口号)
  • 常见可选值:
    • AF_INETIPv4 (最常用,比如 192.168.1.1
    • AF_INET6:IPv6
    • AF_UNIX:本机进程间通信(不跨网络)

一句话总结:选 AF_INET = 走互联网 IPv4 通信。


2. 第二个参数:SOCK_STREAM(套接字类型)

全称:Socket Type - Stream

  • 含义:指定使用 流式套接字

  • 对应协议:TCP 协议

  • 特点:

    ✅ 可靠传输(数据不丢、不乱序)

    ✅ 面向连接(必须先建立连接再通信)

    ✅ 字节流传输(像水流一样连续传输)

  • 常见可选值:

    • SOCK_STREAMTCP(网页、文件、聊天软件都用它)
    • SOCK_DGRAM:UDP(不可靠、无连接,视频通话/直播用)

一句话总结:选 SOCK_STREAM = 用 TCP 可靠连接。


3. 第三个参数:0(指定具体协议)

  • 含义:让系统自动匹配协议

  • 为什么填 0?

    • 因为 AF_INET + SOCK_STREAM 的组合唯一对应 TCP 协议
    • 填 0 就是告诉操作系统:"你自己按前两个参数选就行"
  • 等价写法(效果完全一样):

    python 复制代码
    socket.socket(socket.AF_INET, socket.SOCK_STREAM, socket.IPPROTO_TCP)

一句话总结:填 0 = 自动使用 TCP 协议,不用手动指定。


整行代码的最终含义

复制代码
socket(AF_INET, SOCK_STREAM, 0)
= 创建一个 【IPv4网络 + TCP可靠连接】 的套接字

这个函数的返回值是什么?

  • 成功 :返回一个套接字对象(文件描述符)
    你可以把它理解成**"网络电话的听筒"**
    • 服务端用它:bind() 绑定端口 → listen() 监听 → accept() 接听
    • 客户端用它:connect() 连接服务器 → send()/recv() 收发数据
  • 失败:返回 -1(报错)

最直观的类比(秒懂)

把网络通信比作打电话

  • AF_INET:选择"公用电话网"(而不是内部对讲机)
  • SOCK_STREAM:选择"语音通话"(稳定、连续、可听懂)
  • 0:自动匹配通话标准
  • socket()拿到了一个电话机

没有这行代码,程序就没有"电话机",完全无法进行网络通信。


实际代码中它的位置(TCP 客户端)

python 复制代码
import socket

# 1. 创建TCP套接字(核心代码)
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)

# 2. 连接服务器
s.connect(("127.0.0.1", 8080))

# 3. 发送/接收数据
s.send(b"hello")
data = s.recv(1024)

# 4. 关闭
s.close()

常见配套组合(必记)

组合 协议 用途
AF_INET + SOCK_STREAM + 0 TCP 网页、文件传输、聊天
AF_INET + SOCK_DGRAM + 0 UDP 视频、直播、DNS查询

总结

  1. socket():创建网络通信的接口(电话机)
  2. AF_INET:使用 IPv4 网络
  3. SOCK_STREAM:使用 TCP 可靠连接
  4. 0:自动匹配 TCP 协议
  5. 整行意义:创建一个 TCP/IPv4 网络套接字,用于稳定的网络数据传输

这是所有TCP网络编程的第一行必备代码!

相关推荐
奇树谦43 分钟前
HDD 为什么适合顺序大文件读写:从 RAID 5 到 RAID 50 的原理与性能分析
linux·运维·网络
嵌入式阿蔡1 小时前
Linux_01:交叉编译与开发环境实战——从单片机跨到 Linux 的第一道坎
linux·运维·网络·单片机·嵌入式硬件·嵌入式实时数据库
雷电小将军2 小时前
诡秘之主手游占卜家序列加点 诡秘之主手游占卜家怎么加点
服务器·网络·游戏·电脑·玩游戏
陈皮波比茶3 小时前
Python项目实战-网络机器人(爬虫)
开发语言·网络·爬虫·python·机器人
白猫不黑3 小时前
网络安全/信息安全专业学习路线与入行指南:从大学到岗位的完整规划
网络·学习·安全·web安全·网络安全·黑客技术
wWYy.3 小时前
Linux发送数据包的过程
linux·网络
云飞云共享云桌面3 小时前
自动化设备厂 10 人研发团队,如何共用一台服务器做 SolidWorks 建模?
运维·服务器·网络·3d·自动化·制造
小谢取证4 小时前
实战案例分享:用 AI 绕过模拟器反取证进行动态抓包,落地 APK 真实 IP
大数据·网络·人工智能
xqwxbl4 小时前
小微企业差旅出行不用愁2026年头部商旅平台怎么选?看这篇就够了
大数据·网络·人工智能
QH139292318804 小时前
NVIDIA H200 H300服务器
运维·服务器·开发语言·网络·信息与通信