网络编程-创建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_INET:IPv4 (最常用,比如 192.168.1.1)
    • AF_INET6:IPv6
    • AF_UNIX:本机进程间通信(不跨网络)

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


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

全称:Socket Type - Stream

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

  • 对应协议:TCP 协议

  • 特点:

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

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

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

  • 常见可选值:

    • SOCK_STREAM:TCP(网页、文件、聊天软件都用它)
    • 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网络编程的第一行必备代码!

相关推荐
梦到啥说啥13 分钟前
Linux网络编程:TCP网络协议
网络·网络协议·tcp/ip
Shanks.4 小时前
2026 远程控制软件实测:ToDesk / 向日葵 / RustDesk / TeamViewer 在跨城与弱网下的真实差距
网络·远程工作·软件需求
Jeremy_WW4 小时前
802.3协议解读 06:117章节 RS 和 200GMII / 400GMII I
网络·网络协议·信息与通信·光模块·802.3协议
坤坤子吖5 小时前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
顧棟5 小时前
INFINI Gateway 服务器端口重用(SO_REUSEPORT)实现与分析
网络·gateway
沫璃染墨6 小时前
从零入门计算机网络系列(十八):TCP连接管理详解——从三次握手与四次挥手到TIME_WAIT机制
运维·服务器·网络·c++·网络协议·tcp/ip·tcp
LabVIEW开发7 小时前
Omron PLC:接 LabVIEW 常踩的 5 个坑
服务器·网络·labview·labview知识·labview功能·labview程序
南京码讯光电技术有限公司7 小时前
工业5G/4G路由器怎么选?核心参数解析与工业级网关选购指南
网络·智能路由器
爱和冰阔落7 小时前
【Linux网络】JsonCpp 怎么实现序列化?从 Request/Response 到网络计算器消息设计
linux·运维·网络·php
feng_you_ying_li21 小时前
linux之数据链路层
linux·网络·智能路由器