- 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kun1280437633/article/details/80316543
tcp客户端
import socket
def main():
"""文件下载器的客户端逻辑"""
# 创建TCP套接字
tcp_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器
server_addr = ('127.0.0.1', 1315)
tcp_client.connect(server_addr)
# 发送要下载的文件名
download_file_name = input('请输入要下载的文件名:')
tcp_client.send(download_file_name.encode('utf-8'))
# 接收服务器发送的文件内容
recv_data = tcp_client.recv(1024)
print('客户端接收到的数据是:', recv_data)
if recv_data:
# 保存接收到的内容到文件里
download_file = open('(新)'+download_file_name, 'wb')
download_file.write(recv_data)
download_file.close()
else:
print('服务器没有发送数据过来~')
# 关闭套接字
tcp_client.close()
if __name__ == '__main__':
main()
tcp服务端
import socket
def server_client(client_soc):
# 获取要下载的文件名
file_name = client_soc.recv(1024)
try:
# 读取文件内容
with open(file_name, 'rb') as file:
content = file.read()
# print('with最后一行:',file.closed)
# print('with之后:', file.closed) # with 打开的文件会自动关闭
# 把文件内容发送给客户端
client_soc.send(content) # rb 模式读取到的就是二进制数据,可以直接发送
except:
print('无法打开文件 %s' % file_name)
# 关闭客户端套接字
client_soc.close()
def main():
"""文件下载器的服务器逻辑"""
# 创建 TCP 套接字,并处理服务器的初始化
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp_server.bind(("", 1315))
tcp_server.listen(128)
# 获取客户端连接
print('正在获取客户端连接~')
client_soc, client_addr = tcp_server.accept()
# 为新客户端提供服务
server_client(client_soc)
# 关闭服务器套接字
tcp_server.close()
if __name__ == '__main__':
main()