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

相关推荐
一袋米扛几楼981 小时前
【高级网络】虚拟化与云计算 (Virtualization & Cloud) 深度解析
网络·网络工程
wdfk_prog4 小时前
正常关闭虚拟机时,不要点“关机”,而要点“关闭客户机”
linux·c语言·网络·ide·vscode
@insist1236 小时前
信息安全工程师-网络安全审计产品图谱与实战应用全解
网络·安全·软考·信息安全工程师·软件水平考试
梵豪6 小时前
太原市政府办公网络规划与设计
网络
yantaohk6 小时前
一键下载微信视频号所有页面视频,支持批量下载、加密视频解密、自动去重
网络·微信·音视频
其实防守也摸鱼7 小时前
无线网络安全--实验 规避WLAN验证之发现隐藏的SSID
java·开发语言·网络·安全·web安全·智能路由器·无线网络安全
书源丶7 小时前
四十三、网络编程(下)——TCP 编程与 HTTP 入门
java·网络·tcp/ip·http
weixin_514253189 小时前
507-aguvis tmux
网络
从零开始学习人工智能10 小时前
一文读懂Safous网关+POP架构:零信任ZTNA完整工作原理(请求+响应全流程)
服务器·网络·架构