<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        python點對點簡單實現

        來源:懂視網 責編:小OO 時間:2020-11-27 14:13:32
        文檔

        python點對點簡單實現

        點對點聊天首先是基于多線程的網絡編程,其次就是將每一個連接都保存為一個具有獨一屬性的對象并添加到連接列表中,對于每一個連接對象發送過來的信息必須要包含主要的三項內容(from,to,messages),這樣當信息發送到服務器之后服務器根據to的連接對象遍歷連接列表找到目標對象將信息發送給目標,目標拿到信息后就知道是誰發過來的,然后根據id號碼進行回復。此實現將會繼續完善,后續新加功能將會在我個人github主頁展現。服務器端實現。
        推薦度:
        導讀點對點聊天首先是基于多線程的網絡編程,其次就是將每一個連接都保存為一個具有獨一屬性的對象并添加到連接列表中,對于每一個連接對象發送過來的信息必須要包含主要的三項內容(from,to,messages),這樣當信息發送到服務器之后服務器根據to的連接對象遍歷連接列表找到目標對象將信息發送給目標,目標拿到信息后就知道是誰發過來的,然后根據id號碼進行回復。此實現將會繼續完善,后續新加功能將會在我個人github主頁展現。服務器端實現。
        這篇文章主要為大家詳細介紹了python實現簡單點對點p2p聊天,具有一定的參考價值,感興趣的小伙伴們可以參考一下

        點對點聊天首先是基于多線程的網絡編程,其次就是將每一個連接都保存為一個具有獨一屬性的對象并添加到連接列表中,對于每一個連接對象發送過來的信息必須要包含主要的三項內容(from,to,messages),這樣當信息發送到服務器之后服務器根據to的連接對象遍歷連接列表找到目標對象將信息發送給目標,目標拿到信息后就知道是誰發過來的,然后根據id號碼進行回復。此實現將會繼續完善,后續新加功能將會在我個人github主頁展現

        服務器端實現:

        #coding:utf-8
        '''
        file:server.py
        date:2017/9/10 12:43
        author:lockey
        email:lockey@123.com
        platform:win7.x86_64 pycharm python3
        desc:p2p communication serverside
        '''
        import socketserver,json
        import subprocess
        
        connLst = []
        ## 連接列表,用來保存一個連接的信息(代號 地址和端口 連接對象)
        class Connector(object):#連接對象類
         def __init__(self,account,password,addrPort,conObj):
         self.account = account
         self.password = password
         self.addrPort = addrPort
         self.conObj = conObj
        
        
        class MyServer(socketserver.BaseRequestHandler):
        
         def handle(self):
         print("got connection from",self.client_address)
         register = False
         while True:
         conn = self.request
         data = conn.recv(1024)
         if not data:
         continue
         dataobj = json.loads(data.decode('utf-8'))
         #如果連接客戶端發送過來的信息格式是一個列表且注冊標識為False時進行用戶注冊
         if type(dataobj) == list and not register:
         account = dataobj[0]
         password = dataobj[1]
         conObj = Connector(account,password,self.client_address,self.request)
         connLst.append(conObj)
         register = True
         continue
         print(connLst)
         #如果目標客戶端在發送數據給目標客服端
         if len(connLst) > 1 and type(dataobj) == dict:
         sendok = False
         for obj in connLst:
         if dataobj['to'] == obj.account:
         obj.conObj.sendall(data)
         sendok = True
         if sendok == False:
         print('no target valid!')
         else:
         conn.sendall('nobody recevied!'.encode('utf-8'))
         continue
        
        if __name__ == '__main__':
         server = socketserver.ThreadingTCPServer(('192.168.1.4',8022),MyServer)
         print('waiting for connection...')
         server.serve_forever()

        客戶端實現:

        #coding:utf-8
        '''
        file:client.py.py
        date:2017/9/10 11:01
        author:lockey
        email:lockey@123.com
        platform:win7.x86_64 pycharm python3
        desc:p2p communication clientside
        '''
        from socket import *
        import threading,sys,json,re
        
        HOST = '192.168.1.4' ##
        PORT=8022
        BUFSIZ = 1024 ##緩沖區大小 1K
        ADDR = (HOST,PORT)
        
        tcpCliSock = socket(AF_INET,SOCK_STREAM)
        tcpCliSock.connect(ADDR)
        userAccount = None
        def register():
         myre = r"^[_a-zA-Z]w{0,}"
         #正則驗證用戶名是否合乎規范
         accout = input('Please input your account: ')
         if not re.findall(myre, accout):
         print('Account illegal!')
         return None
         password1 = input('Please input your password: ')
         password2 = input('Please confirm your password: ')
         if not (password1 and password1 == password2):
         print('Password not illegal!')
         return None
         global userAccount
         userAccount = accout
         return (accout,password1)
        
        class inputdata(threading.Thread):
         def run(self):
         while True:
         sendto = input('to>>:')
         msg = input('msg>>:')
         dataObj = {'to':sendto,'msg':msg,'froms':userAccount}
         datastr = json.dumps(dataObj)
         tcpCliSock.send(datastr.encode('utf-8'))
        
        
        class getdata(threading.Thread):
         def run(self):
         while True:
         data = tcpCliSock.recv(BUFSIZ)
         dataObj = json.loads(data.decode('utf-8'))
         print('{} -> {}'.format(dataObj['froms'],dataObj['msg']))
        
        
        def main():
         while True:
         regInfo = register()
         if regInfo:
         datastr = json.dumps(regInfo)
         tcpCliSock.send(datastr.encode('utf-8'))
         break
         myinputd = inputdata()
         mygetdata = getdata()
         myinputd.start()
         mygetdata.start()
         myinputd.join()
         mygetdata.join()
        
        
        if __name__ == '__main__':
         main()

        運行結果示例:

        服務器端結果:

        這里寫圖片描述

        客戶端1:

        這里寫圖片描述

        客戶端2:

        這里寫圖片描述

        客戶端3:

        這里寫圖片描述

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        python點對點簡單實現

        點對點聊天首先是基于多線程的網絡編程,其次就是將每一個連接都保存為一個具有獨一屬性的對象并添加到連接列表中,對于每一個連接對象發送過來的信息必須要包含主要的三項內容(from,to,messages),這樣當信息發送到服務器之后服務器根據to的連接對象遍歷連接列表找到目標對象將信息發送給目標,目標拿到信息后就知道是誰發過來的,然后根據id號碼進行回復。此實現將會繼續完善,后續新加功能將會在我個人github主頁展現。服務器端實現。
        推薦度:
        標簽: 簡單 實現 點對點
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲午夜久久久影院| 丁香花免费完整高清观看| 成人免费黄色网址| 亚洲国产精品无码AAA片| 美女视频黄a视频全免费网站色 | 亚洲成人福利在线| 在线观看免费播放av片| 中国videos性高清免费| 国产成人免费视频| 在线观看午夜亚洲一区| 亚洲精品无码不卡| 韩国免费a级作爱片无码| 亚洲国产精品嫩草影院久久 | 国产成人亚洲综合无| 成人无码区免费视频观看 | 在线观看永久免费视频网站| 亚洲激情校园春色| 91嫩草免费国产永久入口| 亚洲天天做日日做天天欢毛片| 大地资源在线资源免费观看| 国产亚洲无线码一区二区| 成av免费大片黄在线观看| 亚洲色婷婷一区二区三区| a级毛片免费在线观看| 嫖丰满老熟妇AAAA片免费看| 日本免费的一级v一片| 亚洲成a∧人片在线观看无码| 最近最新的免费中文字幕| 亚洲性色AV日韩在线观看| 日韩免费一区二区三区| 国产亚洲精品精品精品| 亚洲国产精品成人AV无码久久综合影院| 国产精品亚洲精品爽爽| 青青草原亚洲视频| 一区二区三区无码视频免费福利| 国产精品久久久亚洲| 8x8×在线永久免费视频| 亚洲av成人一区二区三区| 日本免费一二区在线电影| 青青草97国产精品免费观看| 国产性爱在线观看亚洲黄色一级片 |