利用Python中的socket进行文件下载过程
客户端代码如下:
- import socket
- def main():
- # 创建套接字
- tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- dest_ip = input("请输入ip:")
- dest_port = int(input("请输入port:"))
- tcp_client_socket.connect((dest_ip, dest_port))
- file_name = input("请输入文件名:")
- tcp_client_socket.send(file_name.encode("utf-8"))
- recv_data = tcp_client_socket.recv(1024)
- print(recv_data)
- # 对是否收到数据进行判断,若为空不创建新文件
- if recv_data:
- with open("[新]" + file_name, "wb") as f:
- f.write(recv_data)
- tcp_client_socket.close()
- if __name__ == '__main__':
- main()
服务器代码如下:
- import socket
- def main():
- # 创建套接字
- tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
- tcp_server_socket.bind(("", 8080))
- tcp_server_socket.listen(128)
- new_socket_client, client_addr = tcp_server_socket.accept()
- file_name = new_socket_client.recv(1024).decode("utf-8")
- print("客户地址: %s" % str(client_addr))
- # 判断文件名称
- file_content = None
- try:
- f = open(file_name, "rb")
- file_content = f.read()
- f.close()
- except Exception as res:
- print("文件名称不正确")
- if file_content:
- new_socket_client.send(file_content)
- new_socket_client.close()
- tcp_server_socket.close()
- if __name__ == '__main__':
- main()
为了尝试文件是否传输成功,一开始用一个xx.py的文件进行实验,结果多次都没产生新文件,以为代码有错,查了半天。结果发现是那个文件是个空文件,就不会创建新文件。