# 导入 socket 模块
import socket
# 创建一个服务器端的 Socket 对象
def create_server():
# 创建一个 TCP/IP socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定 socket 到本地地址和端口
server_address = ('localhost', 10000)
print(f'Starting up on {server_address[0]} port {server_address[1]}')
server_socket.bind(server_address)
# 监听传入连接,参数指定等待连接的最大数
server_socket.listen(1)
while True:
# 等待连接
print('Waiting for a connection...')
connection, client_address = server_socket.accept()
try:
print(f'Connection from {client_address}')
# 接收数据
while True:
data = connection.recv(16)
print(f'Received: {data.decode()}')
if data:
# 发送数据回客户端
connection.sendall(data.upper())
else:
print('No more data from', client_address)
break
finally:
# 清理连接
connection.close()
# 创建一个客户端的 Socket 对象
def create_client():
# 创建一个 TCP/IP socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
server_address = ('localhost', 10000)
print(f'Connecting to {server_address[0]} port {server_address[1]}')
client_socket.connect(server_address)
try:
# 发送数据
message = 'This is the message. It will be repeated.'
print(f'Sending: {message}')
client_socket.sendall(message.encode())
# 接收响应
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
data = client_socket.recv(16)
amount_received += len(data)
print(f'Received: {data.decode()}')
finally:
# 清理连接
print('Closing socket')
client_socket.close()
if __name__ == '__main__':
# 你可以在这里选择运行服务器或客户端代码
# create_server()
create_client()
创建服务器端:
create_server() 函数创建了一个服务器端的 Socket 对象。socket.socket() 创建一个 TCP/IP 套接字。bind() 方法将套接字绑定到本地地址和端口。listen() 方法开始监听传入连接。accept() 方法等待并接受客户端连接。recv() 方法接收客户端发送的数据,并使用 sendall() 方法将数据转换为大写后返回给客户端。创建客户端:
create_client() 函数创建了一个客户端的 Socket 对象。connect() 方法连接到服务器。sendall() 方法发送数据到服务器。recv() 方法接收服务器返回的数据。运行代码:
if __name__ == '__main__': 部分,可以选择运行服务器或客户端代码。注释掉了服务器代码以避免同时运行时产生冲突。上一篇:python上传文件
下一篇:python set类型
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站