Socket 套接字 是一种 进程之间的 通信机制 , 通过套接字可以在 不同的进程之间 进行数据交换 ;
在 网络编程 中 , Socket 套接字 主要用于 客户端 与 服务器 之间的 通信 , 大部分 网络相关的应用程序 , 都使用到了 Socket 套接字技术 ;
套接字有两种类型 :
Socket 套接字使用步骤 :
Socket 套接字 进行 数据通信时 , 需要有两个 Socket 套接字分别作为 客户端 和 服务器端 :
一个 服务器端 可以 同时与 多个 客户端 进行 数据交互 ;
Socket 服务器端流程 :
# 1. 创建 socket 实例对象
import time
# 2. 为 socket 实例对象 绑定 IP 地址和端口号
# IP 地址是字符串类型, 端口号是 int 类型, 将这两个数据定义到元组中
socket_server.bind(("127.0.0.1", 8090))
# 4. 阻塞等待连接 , 如果没有客户端连接 , 会一直阻塞在这里
# accept 函数返回的是 二元元组 , 使用两个变量接收该元组
# conn 是连接的 socket 对象
# address 是连接的 地址
client_socket, client_address = socket_server.accept()
# 向客户端发送连接成功提示
client_socket.send("你好, 客户端!".encode("UTF-8"))
# 关闭连接
client_socket.close()
代码示例 :
"""
Socket 服务器 代码示例
"""
# 导入 socket 模块
import socket
# 1. 创建 socket 实例对象
import time
socket_server = socket.socket()
# 2. 为 socket 实例对象 绑定 IP 地址和端口号
# IP 地址是字符串类型, 端口号是 int 类型, 将这两个数据定义到元组中
socket_server.bind(("127.0.0.1", 8090))
# 3. 服务器端监听端口
# 传入的参数是一个整数 , 该参数表示允许连接的数量
# 如果连接已满后面的连接请求会等待
socket_server.listen(100)
while True:
# 4. 阻塞等待连接 , 如果没有客户端连接 , 会一直阻塞在这里
# accept 函数返回的是 二元元组 , 使用两个变量接收该元组
# conn 是连接的 socket 对象
# address 是连接的 地址
client_socket, client_address = socket_server.accept()
# 向客户端发送连接成功提示
client_socket.send("你好, 客户端!".encode("UTF-8"))
print(f'客户端连接成功 {client_address}')
# 5. 服务器端与客户端进行交互
while True:
# 循环接收客户端数据, 并使用 UTF-8 解码
data = client_socket.recv(1024).decode("UTF-8")
# 向客户端会送消息
client_socket.send(f"服务端已收到: {data}".encode())
print(f"客户端: {data}")
if data == 'quit':
break
# 关闭连接
client_socket.close()
print(f'客户端连接关闭 {client_address}')
Socket 客户端流程 :
# 1. 创建 socket 实例对象
client_socket = socket.socket()
# 2. 客户端连接服务器, IP 地址和端口号放在元组中
client_socket.connect(('127.0.0.1', 8090))
# 发送数据到服务器
client_socket.send('你好, 服务器!'.encode())
# 4. 关闭连接
client_socket.close()
代码示例 :
import socket
# 创建TCP socket对象
import time
# 1. 创建 socket 实例对象
client_socket = socket.socket()
# 2. 客户端连接服务器, IP 地址和端口号放在元组中
client_socket.connect(('127.0.0.1', 8090))
# 3. 向服务器端发送消息和接收消息
# 发送数据到服务器
client_socket.send('你好, 服务器!'.encode())
print("客户端发送: 你好, 服务器!")
time.sleep(1)
# 接收服务器数据
data = client_socket.recv(1024).decode("UTF-8")
print(f"服务端: {data}")
# 获取命令行输入发送给客户端
while True:
command = input("请输入: ")
client_socket.send(command.encode())
print(f"客户端发送: {command}")
if command == 'quit':
break
# 接收服务器数据
data = client_socket.recv(1024).decode("UTF-8")
print(f"服务端: {data}")
# 4. 关闭连接
client_socket.close()
print("客户端关闭")
先启动服务器端 :
启动客户端 :
此时服务器端信息如下 :
客户端中断输入 1 :
服务器端效果 :
客户端继续输入信息 :
服务器端信息如下 :
客户端输入 quit 关闭连接 :
服务器端对应的数据 :