Socket 网络编程 —— 提问式自测

发布时间:2026/7/13 1:47:52
Socket 网络编程 —— 提问式自测
Socket 网络编程 —— 提问式自测基础概念Q1什么是 socket作用是什么计算机之间通信的“电话机”用于收发网络数据。几乎所有网络程序都用到它。Q2TCP 客户端和服务端怎么区分主动发起连接的是客户端等待连接的是服务端。口诀客户端主动出击服务端守株待兔。TCP 客户端5步Q3TCP 客户端开发的 5 个步骤socket()创建套接字connect()连接服务器send()发送数据recv()接收数据close()关闭套接字Q4创建 socket 的两个参数是什么✅AF_INETIPv4 /AF_INET6IPv6SOCK_STREAMTCP /SOCK_DGRAMUDPQ5为什么要 encode/decode⚠️socket 传输的是字节流不能直接传字符串。发送前.encode()接收后.decode()。Q6connect() 传参要注意什么⚠️必须是元组connect((IP, 端口))❌ 不能写成connect(IP, 端口)TCP 服务端7步Q7TCP 服务端开发的 7 个步骤socket()创建套接字bind()绑定 IP 和端口listen()开启监听accept()等待客户端连接阻塞recv()接收数据send()发送数据close()关闭套接字Q8accept() 返回什么返回(conn_socket, ip_port)conn_socket与客户端通信的新套接字收发数据用这个ip_port客户端地址(IP, 端口)Q9bind() 的 IP 传 是什么意思表示绑定本机所有网卡通过任何 IP 都能访问。Q10send/recv 该用哪个套接字⚠️监听套接字→ 只负责accept()通信套接字accept()返回的→ 负责send()/recv()多客户端Q11如何让服务端服务多个客户端外层循环accept()内层循环recv() 异常捕获ConnectionResetError检测客户端断开。Q12客户端断开后为什么要 close不关会泄漏文件描述符耗尽后无法接受新连接。端口复用Q13端口被占用怎么办bind()前加一行tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)Q14setsockopt() 三个参数什么意思⚠️socket.SOL_SOCKET→socket.SO_REUSEADDR→True飞秋 UDPQ15飞秋消息格式1:ID:昵称:群组:接收者ID:消息正文Q16飞秋为什么用 gbk 编码⚠️飞秋是 Windows 老软件默认GBK。用 UTF-8 对方看到的是乱码。Q17UDP 广播和普通发送有什么区别普通点对点单播广播发给局域网所有主机需设置SO_BROADCAST目标地址用x.x.x.255 速查表点击展开速查表场景代码TCP 套接字socket.socket(AF_INET, SOCK_STREAM)UDP 套接字socket.socket(AF_INET, SOCK_DGRAM)客户端socket()→connect()→send()→recv()→close()服务端socket()→bind()→listen()→accept()→recv()→send()→close()⚠️ 易错点点击展开 4 个易错点⚠️connect 要传元组connect((IP, 端口))✅ /connect(IP, 端口)❌收发数据用通信套接字accept()返回的那个不是监听套接字编码必须一致发用utf-8收也得utf-8飞秋例外用gbk用完关套接字服务端先关conn_socket再关tcp_server_socket