Python语言Socket使用TCP协议模拟模拟客户端与服务器端,实现文件下载器功能
注意:仅传送1KB以内文件大小,多点可以自行修改,单纯修改文件大小会造成其他错误
文件目录,大小等均可修改
另外因为服务端须不停接收客户端请求,故死循环没有设置跳出条件,可自行更改
简单介绍
1.首先打开服务器端,会自行绑定IP端口信息
2.打开客户端,输入要链接的服务器IP,端口与文件名(本目录下)
3.服务端检测该目录下是否有该文件,并选择进行发送或者异常处理操作
4.客户端经过确认后会建立该文件副本在本目录下
其余的注释完善,自行理解!
客户端代码:
import socket
def main():
# 1.创建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定IP信息
tcp_socket.bind(("", 5773))
# 3.链接服务器
tcp_socket.connect((input("Server IP:"), int(input("Server Port:"))))
# 4.发送要下载的文件名
file_name = input("File name:")
tcp_socket.send(file_name.encode("gbk"))
# 接收服务器文件消息
recv_data = tcp_socket.recv(1024)
# 如果接收消息不为空,执行写入
if recv_data:
# 写入到[new]filename文件中
with open('./[new]' + file_name, 'wb') as f:
f.write(recv_data)
print("Download Succeed!")
else:
print("Download Fail")
# 关闭套接字
tcp_socket.close()
if __name__ == '__main__':
main()
服务器端代码:
from socket import *
def server_2_client(new_client_socket, client_addr):
"""服务器发送文件函数"""
# 获取文件名
file_name = new_client_socket.recv(1024).decode("utf-8")
print("%s Need %s" % (client_addr, file_name))
file_content = None
# 防止没有文件或者权限造成的错误
try:
file = open(file_name, 'rb') # 打开文件
file_content = file.read() # 读取文件
file.close() # 关闭文件
# 未找到文件异常处理
except Exception as ret:
print("Not Found File!")
# 若内容非空,发送文件
if file_content:
new_client_socket.send(file_content)
print("OK__Send Succeed!")
def main():
# 创建套接字
tcp_socket = socket(AF_INET, SOCK_STREAM)
# 绑定IP
tcp_socket.bind(("", 5577))
# 设置监听
tcp_socket.listen(128)
# 服务多个客户端
while True:
# 接收新客户端与信息
new_client_socket, client_addr = tcp_socket.accept()
# 调用文件发送函数
server_2_client(new_client_socket, client_addr)
# 关闭新客户端套接字
new_client_socket.close()
# 关闭套接字,未作停止处理
tcp_socket.close()
if __name__ == '__main__':
main()