Python day08_TCPファイルダウンロード

2615 ワード

tcp小試行ファイルダウンロード器
クライアントがwindowsの下のpycharmで書かれていることをリアルにシミュレートするために、サービス側はubuntuの下のpycharmで書かれています.
クライアント
import socket

if __name__ == '__main__':

    #   tcpsocket   

    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    #         

    tcp_client_socket.connect(("192.168.36.111", 8989))

    #          

    file_name = input("           :")

    #           

    file_data = file_name.encode("gbk")

    #            

    tcp_client_socket.send(file_data)

    with open("/home/python/Desktop/" + file_name, "wb") as file:

        #              

        while True:

            #              

            file_data = tcp_client_socket.recv(1024)

            if file_data:

                #              

                file.write(file_data)

            else:

                #     ,             

                break

    #   socket

    tcp_client_socket.close()

サービス側
import socket

import os

if __name__ == '__main__':

    #   tcp   socket

    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    #   socket  

    # 1. SOL_SOCKET:     socket

    # 2. SO_REUSEADDR:       

    # 3. True:     

    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

    #      

    tcp_server_socket.bind(("", 8989))

    #     ,             ,                  

    tcp_server_socket.listen(128)

    #   :             ,                      

    #            

    while True:

        #             

        service_client_socket, ip_port = tcp_server_socket.accept()

        print(ip_port)

        #                      ,              

        file_name_data = service_client_socket.recv(1024)

        #        

        file_name = file_name_data.decode("gbk")

        print(file_name)

        # file = open(file_name, "rb")

        # 1.         

        if os.path.exists(file_name):

            #         ,        

            # file:      

            with open(file_name, "rb") as file:

                while True:

                    #     

                    file_data = file.read(1024)

                    if file_data:

                        #       ,        

                        service_client_socket.send(file_data)

                    else:

                        #         ,    

                        break

         else:

            print("     ")

        service_client_socket.close()

    tcp_server_socket.close()