import socket
def main():
# 1. 創建套接字
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 獲取服務器的ip port
dest_ip = input("請輸入下載服務器的ip:")
dest_port = int(input("請輸入下載服務器的port:"))
# 3. 鏈接服務器
tcp_socket.connect((dest_ip, dest_port))
# 4. 獲取下載的文件名字
download_file_name = input("請輸入要下載的文件名字:")
# 5. 將文件名字發送到服務器
tcp_socket.send(download_file_name.encode("utf-8"))
# 6. 接收文件中的數據
recv_data = tcp_socket.recv(1024) # 1024--->1K 1024*1024--->1k*1024=1M 1024*1024*124--->1G
if recv_data:
# 7. 保存接收到的數據到一個文件中
with open("[新]" + download_file_name, "wb") as f:
f.write(recv_data)
# 8. 關閉套接字
tcp_socket.close()
if __name__ == "__main__":
main()
import socket
def send_file_2_client(new_client_socket, client_addr):
# 1. 接收客戶端 需要下載的文件名
# 接收客戶端發送過來的 要下載的文件名
file_name = new_client_socket.recv(1024).decode("utf-8")
print("客戶端(%s)需要下載文件是:%s" % (str(client_addr), file_name))
file_content = None
# 2. 打開這個文件,讀取數據
try:
f = open(file_name, "rb")
file_content = f.read()
f.close()
except Exception as ret:
print("沒有要下載的文件(%s)" % file_name)
# 3. 發送文件的數據給客戶端
if file_content:
# new_client_socket.send("hahahghai-----ok-----".encode("utf-8"))
new_client_socket.send(file_content)
def main():
# 1. 買個手機(創建套接字 socket)
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 2. 插入手機卡(綁定本地信息 bind)
tcp_server_socket.bind(("", 7890))
# 3. 將手機設置爲正常的 響鈴模式(讓默認的套接字由主動變爲被動 listen)
tcp_server_socket.listen(128)
while True:
# 4. 等待別人的電話到來(等待客戶端的鏈接 accept)
new_client_socket, client_addr = tcp_server_socket.accept()
# 5. 調用發送文件函數,完成爲客戶端服務
send_file_2_client(new_client_socket, client_addr)
# 6. 關閉套接字
new_client_socket.close()
tcp_server_socket.close()
if __name__ == "__main__":
main()