Python implemented simple point pair (P2P) Chat Python Point Point

Point -to -point chat is first based on multi -threaded network programming, and secondly, save each connection as an object with unique attributes and add it to the connection list. Three items (from, to, messages), so that when the information is sent to the server, the server traverses the target object to send the information to the target according to the connection list of the to -to -the -connected object. Reply according to the ID number. Essence This implementation will continue to be improved, and the new new features will be in my personal persongithub homepageShow

server terminal implementation:

#coding:utf-8
'''
file:server.py
date:2017/9/10 12:43
author:lockey
email:[email protected]
platform:win7.x86_64 pycharm python3
desc:p2p communication serverside
'''
import socketserver,json
import subprocess

connLst = []
## Connection list to save a connected information (code address and port connection object)
class Connector(object):# connection object class
    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'))
            # If the information format sent by the client is a list and the registration logo is registered when the registration logo is 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 the target client sends data to the target customer service side
            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()

Client implementation:

#coding:utf-8
'''
file:client.py.py
date:2017/9/10 11:01
author:lockey
email:[email protected]
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  ## buffer size 1K
ADDR = (HOST,PORT)

tcpCliSock = socket(AF_INET,SOCK_STREAM)
tcpCliSock.connect(ADDR)
userAccount = None
def register():
    myre = r"^[_a-zA-Z]\w{0,}"
    # 12 12 12 12 whether the user name is in line with the specification
    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()

Run results example:

server side results:

Client 1:

这里写图片描述
Client 2:

这里写图片描述
Client 3:

If you run wrong, please check the platform and Python version number

source

Leave a Reply

Your email address will not be published. Required fields are marked *