python3 socket传输文件代码示例
时间: 2023-09-23 20:05:23 浏览: 142
### 回答1:
以下是使用Python3中的Socket模块传输文件的示例代码:
服务端:
```python
import socket
# 创建socket对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址和端口号
server_socket.bind(('localhost', 8000))
# 监听客户端连接
server_socket.listen(1)
print('等待客户端连接...')
# 接收客户端连接
client_socket, client_address = server_socket.accept()
print('客户端已连接,地址为', client_address)
# 接收客户端发送的文件名
file_name = client_socket.recv(1024).decode('utf-8')
print('接收到的文件名为', file_name)
# 打开文件并读取数据
with open(file_name, 'rb') as f:
data = f.read()
# 发送文件数据
client_socket.sendall(data)
# 关闭连接
client_socket.close()
server_socket.close()
```
客户端:
```python
import socket
# 创建socket对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务端
client_socket.connect(('localhost', 8000))
# 发送文件名
file_name = 'test.txt'
client_socket.send(file_name.encode('utf-8'))
# 接收文件数据
data = client_socket.recv(1024)
# 写入文件
with open(file_name, 'wb') as f:
f.write(data)
# 关闭连接
client_socket.close()
```
以上代码仅供参考,实际应用中需要考虑网络环境和文件大小等因素,进行适当的优化和处理。
### 回答2:
以下是一个使用Python3中的socket库传输文件的示例代码:
发送方代码:
```python
import socket
def send_file(file_path, host, port):
# 创建TCP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# 连接服务器
sock.connect((host, port))
# 发送文件名和文件内容
with open(file_path, "rb") as f:
file_name = file_path.split("/")[-1]
sock.sendall(file_name.encode()) # 发送文件名
# 发送文件内容
while True:
data = f.read(1024)
if not data:
break
sock.sendall(data)
finally:
sock.close()
# 调用示例
file_path = "/path/to/file.txt"
host = "localhost"
port = 12345
send_file(file_path, host, port)
```
接收方代码:
```python
import socket
def recv_file(save_path, host, port):
# 创建TCP Socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
# 绑定IP和端口
sock.bind((host, port))
# 监听连接
sock.listen(1)
print("等待连接...")
conn, addr = sock.accept()
print("已连接:", addr)
# 接收文件名
file_name = conn.recv(1024).decode()
save_path = save_path + "/" + file_name
# 接收文件内容并保存到本地
with open(save_path, "wb") as f:
while True:
data = conn.recv(1024)
if not data:
break
f.write(data)
print("文件接收完毕!")
finally:
sock.close()
# 调用示例
save_path = "/path/to/save"
host = "localhost"
port = 12345
recv_file(save_path, host, port)
```
发送方通过创建一个TCP Socket连接到接收方指定的IP和端口,使用`sendall()`函数分别发送文件名和文件内容。接收方通过创建一个TCP Socket绑定到指定的IP和端口并监听连接,接收到发送方的连接请求后,使用`accept()`函数接收连接并返回与发送方通信的Socket对象。接收方首先接收文件名,并将其与保存路径拼接,然后接收文件内容并保存到指定的位置。
### 回答3:
下面是一个使用Python3的socket传输文件的代码示例:
```python
# 服务器端代码
import socket
def receive_file(server_ip, server_port, filename):
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind((server_ip, server_port))
server_socket.listen(1)
print("等待客户端连接...")
client_socket, client_address = server_socket.accept()
print("客户端已连接:", client_address)
with open(filename, 'wb') as file:
print("开始接收文件...")
while True:
data = client_socket.recv(1024)
if not data:
break
file.write(data)
print("文件接收完成.")
client_socket.close()
server_socket.close()
# 客户端代码
def send_file(server_ip, server_port, filename):
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((server_ip, server_port))
with open(filename, 'rb') as file:
print("开始发送文件...")
while True:
data = file.read(1024)
if not data:
break
client_socket.sendall(data)
print("文件发送完成.")
client_socket.close()
# 示例用法
if __name__ == '__main__':
server_ip = "localhost"
server_port = 8888
filename = "example.txt"
server_thread = threading.Thread(target=receive_file, args=(server_ip, server_port, filename))
server_thread.start()
send_file(server_ip, server_port, filename)
server_thread.join()
```
上述代码实现了一个简单的文件传输系统,其中包括一个服务器端和一个客户端。服务器端负责接收文件,客户端负责发送文件。通过使用socket库提供的函数,可以建立TCP连接并实现文件的传输。在示例中,服务器端和客户端使用了不同的线程,以保证能够同时进行文件的发送和接收。
阅读全文