• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
    當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

    python點對點簡單實現(xiàn)

    來源:懂視網(wǎng) 責(zé)編:小OO 時間:2020-11-27 14:13:32
    文檔

    python點對點簡單實現(xiàn)

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

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

    服務(wù)器端實現(xiàn):

    #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'))
     #如果連接客戶端發(fā)送過來的信息格式是一個列表且注冊標(biāo)識為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)
     #如果目標(biāo)客戶端在發(fā)送數(shù)據(jù)給目標(biāo)客服端
     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()

    客戶端實現(xiàn):

    #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 ##緩沖區(qū)大小 1K
    ADDR = (HOST,PORT)
    
    tcpCliSock = socket(AF_INET,SOCK_STREAM)
    tcpCliSock.connect(ADDR)
    userAccount = None
    def register():
     myre = r"^[_a-zA-Z]w{0,}"
     #正則驗證用戶名是否合乎規(guī)范
     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()

    運行結(jié)果示例:

    服務(wù)器端結(jié)果:

    這里寫圖片描述

    客戶端1:

    這里寫圖片描述

    客戶端2:

    這里寫圖片描述

    客戶端3:

    這里寫圖片描述

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

    文檔

    python點對點簡單實現(xiàn)

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

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品国产91久久久久久久a| 欧美精品黑人粗大欧| 国内精品久久久久久久久| 日韩国产成人精品视频| 久久精品无码一区二区三区日韩| 国产福利91精品一区二区| 日韩人妻精品一区二区三区视频| 精品人妻V?出轨中文字幕| 国产成人AV无码精品| 精品无人区麻豆乱码1区2区| 精品无码一区二区三区爱欲| 亚洲热线99精品视频| 日本国产精品久久| 久久国产成人亚洲精品影院| 国产精品嫩草影院久久| 99RE8这里有精品热视频| 欧美一区二区精品| 久久精品免费一区二区三区| 国产精品久久久久影院嫩草| 国产精品福利在线播放| 国产精品无码成人午夜电影| 蜜芽亚洲av无码精品色午夜| 日韩精品无码一区二区三区| 伊人久久精品无码二区麻豆| 亚洲午夜国产精品无码 | 亚洲精品宾馆在线精品酒店| 国产成人亚洲精品影院| 91不卡在线精品国产| 老司机99精品99| 精品国产污污免费网站| 国产精品视频免费| 国内精品久久九九国产精品| 亚洲国产精品国自产电影| 奇米精品一区二区三区在线观看| 国产91精品一区二区麻豆网站 | 午夜精品久视频在线观看| 国产精品一久久香蕉国产线看| 国产精品久久久久9999| 久久99热精品| 国产精品99| 久久夜色精品国产www|