代码讲解:
server
import socket def send_file_client(new_client_socket, new_client_addr):
# 接收客户端需要下载的文件名
file_name = new_client_socket.recv(1024).decode('gbk')
print('客户端' + str(new_client_addr) + '需要下载的文件是: ' + file_name)
# 打开文件读取数据
file_data = None
try:
file = open(file_name, 'rb')
file_data = file.read()
file.close()
except:
print('没有要下载的文件' + file_name)
if file_data:
new_client_socket.send(file_data) def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定服务器ip和port
local_addr = ('', 8000)
tcp_socket.bind(local_addr)
# 监听
tcp_socket.listen(128)
print('等待客户端接入...')
# 等待客户端接入
new_client_socket, new_client_addr = tcp_socket.accept()
print(str(new_client_addr) + ': ' + '接入...')
# 调用函数发送数据给客户端
send_file_client(new_client_socket, new_client_addr)
# 关闭套接字
new_client_socket.close()
tcp_socket.close() if __name__ == '__main__':
main()
client
import socket def main():
# 创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 服务器ip和port
server_ip = input('服务器ip: ') # 192.168.6.206
server_port = int(input('服务器port: '))
# 链接服务器
tcp_socket.connect((server_ip, server_port))
# 需要下载的文件
download_file_name = input('需要下载的文件名: ')
# 发送文件名
tcp_socket.send(download_file_name.encode('gbk'))
# 接收文件
recv_data = tcp_socket.recv(1024*1024)
if recv_data:
with open(download_file_name, 'wb') as file:
file.write(recv_data)
else:
print('没有该文件')
# 关闭套接字
tcp_socket.close() if __name__ == '__main__':
main()
注意:该程序仅能发送文本文件,其他类型请自己更改代码