Python语言Socket使用TCP协议模拟模拟客户端与服务器端,实现文件下载器功能python
注意:仅传送1KB之内文件大小,多点能够自行修改,单纯修改文件大小会形成其余错误
文件目录,大小等都可修改
另外由于服务端须不停接收客户端请求,故死循环没有设置跳出条件,可自行更改web
简单介绍服务器
1.首先打开服务器端,会自行绑定IP端口信息
2.打开客户端,输入要连接的服务器IP,端口与文件名(本目录下)
3.服务端检测该目录下是否有该文件,并选择进行发送或者异常处理操做
4.客户端通过确认后会创建该文件副本在本目录下
其他的注释完善,自行理解!socket
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()