<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
        主站蜘蛛池模板: 亚洲乱码中文字幕手机在线 | 精品国产污污免费网站| 五月天婷亚洲天综合网精品偷| 亚洲日韩亚洲另类激情文学| 99爱在线精品免费观看| 亚洲jjzzjjzz在线播放| 国语成本人片免费av无码| 亚洲天堂2017无码中文| 思思99re66在线精品免费观看| 亚洲精品色播一区二区| 免费一级毛片不卡不收费| 日韩一级片免费观看| 亚洲色无码专区在线观看| 国产精品免费大片| 亚洲五月综合网色九月色| 在线视频免费国产成人| 乱人伦中文视频在线观看免费| 亚洲午夜福利在线观看| 男女作爱在线播放免费网站| 亚洲高清美女一区二区三区| 无码日韩人妻av一区免费| 国产精品亚洲综合一区在线观看| 亚洲一区日韩高清中文字幕亚洲| baoyu777永久免费视频| 亚洲最大在线视频| 国产三级免费观看| 黄色片免费在线观看| 亚洲AV无码专区在线亚| 亚洲国产成人久久一区久久| 久久精品乱子伦免费| 亚洲精品第一国产综合亚AV| a级亚洲片精品久久久久久久| 特级无码毛片免费视频尤物| 国产成+人+综合+亚洲专| 亚洲AⅤ永久无码精品AA| 毛片无码免费无码播放 | 四虎国产精品免费久久| 日本视频免费观看| 久久精品国产精品亚洲毛片| 国产成人精品男人免费| 亚洲视频在线免费观看|