为了使用socket进行服务端与客户端传文件,我们需要遵循以下步骤:
- 服务端创建socket并监听端口
- 客户端连接到该socket
- 服务端接收文件
- 客户端发送文件
- 关闭连接
下面是具体实现的步骤以及示例代码。
步骤1:服务端创建socket并监听端口
服务端首先需要使用socket()函数创建一个套接字并绑定到一个特定的端口,然后调用listen()函数开始监听连接请求。
以下是创建并监听一个稍大于1024的端口的示例代码:
import socket
HOST = '127.0.0.1'
PORT = 12345
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST,PORT))
server_socket.listen(1) # 开始监听连接请求,1表示等待的最大连接数
print('waiting for connection...')
conn, addr = server_socket.accept() # 阻塞等待客户端连接
print('connected by', addr)
步骤2:客户端连接到该socket
客户端需要使用socket()函数创建一个套接字并调用connect()函数连接到服务端的地址和端口。
以下是连接到服务端的示例代码:
import socket
HOST = '127.0.0.1'
PORT = 12345
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))
print("connected to server")
步骤3:服务端接收文件
服务端需要使用recv()函数从客户端接收数据,可以设置缓冲区大小以确保数据可以正确处理。接收完毕后,服务端需要关闭连接。
以下是从客户端接收文件的示例代码:
import socket
def receive_file(conn, filename):
with open(filename, 'wb') as f:
while True:
data = conn.recv(1024) # 一次最多接收1024字节
if not data:
break
f.write(data)
conn.close()
print(f"Received file {filename} successfully")
HOST = '127.0.0.1'
PORT = 12345
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen()
print('waiting for connection...')
conn, addr = server_socket.accept()
print('connected by', addr)
receive_file(conn, "received_file.txt")
步骤4:客户端发送文件
客户端需要使用send()函数向服务端发送数据,可以将数据分割成多个部分,每次发送一部分。发送完毕后,客户端需要关闭连接。
以下是客户端发送文件的示例代码:
import socket
def send_file(client_socket, filename):
with open(filename, 'rb') as f:
while True:
data = f.read(1024) # 一次最多发送1024字节
if not data:
break
client_socket.sendall(data)
client_socket.close()
print(f"Sent file {filename} successfully")
HOST = '127.0.0.1'
PORT = 12345
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))
send_file(client_socket, "file_to_send.txt")
步骤5:关闭连接
在完成收发之后,服务端和客户端需要用close()函数关闭连接以释放资源。
以下是关闭连接的示例代码:
import socket
HOST = '127.0.0.1'
PORT = 12345
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((HOST, PORT))
server_socket.listen()
print('waiting for connection...')
conn, addr = server_socket.accept()
print('connected by', addr)
# 服务端接收文件的代码
conn.close() # 释放连接
import socket
HOST = '127.0.0.1'
PORT = 12345
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((HOST, PORT))
# 客户端发送文件的代码
client_socket.close() # 释放连接
以上是使用socket进行服务端与客户端传文件的完整攻略及示例代码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用socket进行服务端与客户端传文件的方法 - Python技术站