目录
Socket是位于应用层与传输层之间的一个抽象层,可用于不同的网络协议(如TCP、UDP等)它允许应用程序创建一个与网络上的其他主机进行通信的端点
服务端流程
# 创建Socket
Socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 绑定服务器和端口号
servers_addr = ('127.0.0.1', 8080)
Socket.bind(servers_addr)
# 监听客户端请求 最大连接数为5
Socket.listen(5)
print('服务器启动成功,等待客户端连接...')
while True:
# 接受数据
client_socket, client_addr = Socket.accept()
print('与客户端建立连接', client_addr)
# 数据交换
while True:
data = Socket.recv(1024) # 最大1024字节
if len(data) < 1:
print('关闭服务')
break
# 接受客户器端传来的数据
print(data.decode())
# 向客户端发送数据
sen = input('')
Socket.sendall(sen.encode())
Socket.close()
print("已关闭连接")
客户端流程
# 创建Socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 服务器地址和端口
server_address = ('localhost', 8080)
# 连接服务器
client_socket.connect(server_address)
print('已连接到服务器:', server_address)
while True:
# 发送数据
message = input('>>>>')
client_socket.sendall(message.encode())
# 接收响应
response = client_socket.recv(1024)
print('服务器响应:', response.decode())
client_socket.close()
UDP 是无连接的协议,因此不需要像 TCP 那样先建立连接再进行通信
import socket
# 创建 Socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定地址和端口
server_address = ('127.0.0.1', 9000)
server_socket.bind(server_address)
print('服务器启动成功,等待客户端数据...')
while True:
# 接收数据
data, client_address = server_socket.recvfrom(1024) # 最大1024字节
# 处理接收到的数据
print(f'来自客户端 {client_address} 的消息:', data.decode())
# 向客户端发送响应
response = input('请输入要发送给客户端的消息: ')
server_socket.sendto(response.encode(), client_address)
# server_socket.close()
import socket
# 创建 Socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 服务器地址和端口
server_address = ('127.0.0.1', 9000)
while True:
# 发送数据
message = input("请输入要发送给服务器的消息: ")
client_socket.sendto(message.encode(), server_address)
# 接收响应
response, server_address = client_socket.recvfrom(1024) # 最大1024字节
print('服务器响应:', response.decode())
# client_socket.close()