import socket
def sen_file_2_client(new_client_socket, client_addr):
# 1.接受客户端发送过来要下载的文件名
file_name = new_client_socket.recv(1024)
print("客户端(%s)要下载的文件是:%s" % (str(client_addr), file_name.decode("gbk")))
file_content = None
# 2.打开这个文件,读取数据
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception:
print("没有要下载的文件(%s)" % file_name.decode("gbk"))
# 3.发送问价的数据给客户端
if file_content:
new_client_socket.send(file_content)
def main():
# 1.创建套接字 socket(买个手机)
tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2.绑定本地信息 bind(插入手机卡)
tcp_server.bind(("", 7890))
# 3.让默认的套接字由主动变为被动 listen(将手机设置为正常的 响铃模式)
tcp_server.listen(128)
while True:
# 4.等待客户端的链接 accept(等待别人的电话)
print("等待客户链接.....")
new_client_socket, client_addr = tcp_server.accept()
print("收到%s链接" % str(client_addr))
# 5.调用发送文件函数,完成为客户端服务
sen_file_2_client(new_client_socket, client_addr)
# 6.关闭套接字
new_client_socket.close()
tcp_server.close() # 这句因为上面的死循环,不会执行到这句,也可以价格判断让循环中断
if __name__ == '__main__':
main()