python基礎-day36__python

來源:互聯網
上載者:User
#作業:傳輸大檔案的代碼,沒什麼好說的,#server.pyimport osimport jsonimport socketimport structfilepath = r'D:\1.py'sk = socket.socket()sk.bind(('127.0.0.1',9000))sk.listen()conn,addr = sk.accept()filename = os.path.basename(filepath)filesize = os.path.getsize(filepath)dic = {'filename':filename,'filesize':filesize}str_dic = json.dumps(dic).encode('utf-8')len_dic = len(str_dic)length = struct.pack('i',len_dic)conn.send(length)   # dic的長度conn.send(str_dic)  # dicwith open(filepath,'rb') as f:  # 檔案    while filesize:        content = f.read(4096)        conn.send(content)        filesize -= len(content)conn.close()sk.close()#client.pyimport jsonimport structimport socketsk = socket.socket()sk.connect(('127.0.0.1',9000))dic_len = sk.recv(4)dic_len = struct.unpack('i',dic_len)[0]dic = sk.recv(dic_len)str_dic = dic.decode('utf-8')dic = json.loads(str_dic)with open(dic['filename'],'wb') as f:    while dic['filesize']:        content = sk.recv(4096)        dic['filesize'] -= len(content)        f.write(content)sk.close()



#驗證用戶端合法的代碼,#server.pyimport osimport socketimport hmacsecret_key = '老衲洗頭用飄柔'.encode('utf-8')              #伺服器端與用戶端,擁有相同的密鑰,sk = socket.socket()sk.bind(('127.0.0.1',9000))sk.listen()while True:    try:        conn,addr = sk.accept()        random_bytes = os.urandom(32)                        #產生一個bytes類型的隨機數,然後發送到用戶端,        conn.send(random_bytes)        obj = hmac.new(key =secret_key,msg =random_bytes)    #key是密鑰,msg是待加密的訊息,        ret = obj.hexdigest()                                #得到加密的結果,        msg = conn.recv(1024).decode('utf-8')               #得到用戶端的加密結果        if msg == ret:print('是合法的用戶端')              #如果相同,說明,用戶端和伺服器端的密鑰相同,        else:conn.close()    finally:        sk.close()        break#client.pyimport socketimport hmacsecret_key = '老衲洗頭用飄柔'.encode('utf-8')sk = socket.socket()sk.connect(('127.0.0.1',9000))urandom = sk.recv(1024)                                     #得到伺服器的隨機數,hmac_obj =  hmac.new(key = secret_key,msg =urandom)         #進行加密,sk.send(hmac_obj.hexdigest().encode('utf-8'))              #把加密結果發送給伺服器端,若相同則認證通過,sk.close()



#並發編程#server.pyimport socketserverclass MyServer(socketserver.BaseRequestHandler):    def handle(self):        self.request.send(b'hello')        msg = self.request.recv(1024)        print(msg)        print(self.server)        print(self.request)        print(self.client_address)if __name__ == '__main__':    socketserver.TCPServer.allow_reuse_address = True    server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),MyServer)    server.serve_forever()#client.py#因為是並發,所以下面的用戶端程式可以運行多個.import socketsk  = socket.socket()sk.connect(('127.0.0.1',9000))msg = sk.recv(1024)print(msg)sk.send(b'bye')sk.close()#下面部落格對socketserver寫的蠻好,#https://www.cnblogs.com/tianjianng/p/7712648.html#https://www.cnblogs.com/progor/p/8617042.html#https://blog.csdn.net/yannanxiu/article/details/51735452



import hmacobj = hmac.new(key = b'secret_key',msg =b'11010012922')print(obj.hexdigest())obj = hmac.new(key = b'secret_key',msg =b'11010012922')print(obj.hexdigest())

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.