网络编程-创建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网络编程的第一行必备代码!

相关推荐
Chengbei112 小时前
云存储桶漏洞检测工具OSS-2.0更新,全类型文件解析,存储桶遍历 + 敏感排查一站式完成渗透取证
网络·安全·web安全·网络安全·xss
乐维_lwops2 小时前
乐维社区“专家坐诊”第403期问答
运维·网络·监控系统·答疑·lerwee运维智能体
小王C语言3 小时前
虚拟机开机过程中关机,再次开机没有分配 IP
linux·网络·tcp/ip
零零信安3 小时前
暗网监测技术实践(一):威胁源采集与反爬对抗——基于《暗网情报技术能力框架》的双生态视角
网络·数据泄露·零零信安
翼龙云_cloud3 小时前
阿里云国际站代理商:ECS弹性伸缩 自动应对流量高峰
运维·网络·数据库·阿里云·架构
ZJH__GO3 小时前
网络编程v4--群聊和私聊的实现
运维·服务器·网络
方乐寺村4 小时前
解密prompt系列. MCP - 工具演变 & MCP基础
网络·prompt
砚凝霜4 小时前
软考网络工程师|第 4 章 WLAN MAC 机制、Ad Hoc、无线安全、WPAN 蓝牙 ZigBee 完整备考笔记
网络·笔记·安全
严谨的麻辣烫11 小时前
Linux sysctl 网络参数调优实战:高并发与长连接场景下的内核配置
linux·网络·php
爱研究的小梁17 小时前
多链路聚合通信:时延控制与网络波动对抗逻辑梳理
网络·人工智能·信息与通信