<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
        主站蜘蛛池模板: 久久久久久毛片免费看 | 亚洲福利在线播放| 亚洲日韩亚洲另类激情文学| 免费成人激情视频| 亚洲jjzzjjzz在线播放| 一个人免费观看视频www| 国产亚洲精aa在线看| 好大好硬好爽免费视频| 国产精品亚洲专区无码牛牛| 国产成人精品123区免费视频| 亚洲国产成人久久精品大牛影视| 大地资源二在线观看免费高清| 亚洲中文字幕无码久久2020| 四虎成人免费大片在线| 国产精品亚洲lv粉色| 久久久久亚洲av成人无码电影| 两性色午夜免费视频| 亚洲福利电影一区二区?| 国产免费的野战视频| 亚洲精品自偷自拍无码| vvvv99日韩精品亚洲| 99视频免费在线观看| 伊人久久综在合线亚洲2019| 最近中文字幕mv手机免费高清| 99亚洲精品卡2卡三卡4卡2卡| 亚洲男人天堂2020| 免费无码中文字幕A级毛片| 中文字幕亚洲综合小综合在线| 国产精品二区三区免费播放心| 国产裸体美女永久免费无遮挡| 亚洲av福利无码无一区二区| 最近中文字幕免费mv视频8| 一级白嫩美女毛片免费| 亚洲高清视频在线观看| 最近中文字幕mv免费高清视频7 | 亚洲国产精品免费观看| 有色视频在线观看免费高清在线直播| 亚洲成av人影院| 日韩在线视频免费看| 成人久久免费网站| 亚洲成AV人片高潮喷水|