python实现点对点聊天程序
用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利用多线程把发送消息和接收消息分开独立进行。
client代码:
importsocket importsys importthreading importtime classclient(): def__init__(self): self.s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) self.ip="127.0.0.1" defconnect(self): try: self.s.connect((self.ip,8888)) print("connectsuccess") print('connecttime:'+time.ctime()) exceptConnectionError: print('connecterror') sys.exit(-1) except: print('unexpecterror') sys.exit(-1) defsend_sth(self): whileTrue: sth=input('saysomething:\n') try: self.s.sendall(sth.encode('utf-8')) exceptConnectionError: print('connecterror') sys.exit(-1) except: print('unexpecterror') sys.exit(-1) defreceive(self): whileTrue: try: r=self.s.recv(1024) print('getmessage:'+r.decode('utf-8')) exceptConnectionError: print('connecterror') sys.exit(-1) except: print('unexpecterror') sys.exit(-1) c1=client() c1.connect() threading._start_new_thread(c1.receive,()) c1.send_sth()
server代码:
importsocket importsys importthreading importtime defserver(): defbind(): HOST='127.0.0.1' s.bind((HOST,8888)) print("bindok") deflisten(): s.listen(10) print('Socketnowlistening') defsend_sth(conn): whileTrue: try: sth=input('saysomething:\n') conn.sendall(sth.encode('utf-8')) exceptConnectionError: print('connecterror') sys.exit(-1) except: print('unexpecterror') sys.exit(-1) defrecv(conn): whileTrue: try: data=conn.recv(1024) data2=data.decode('utf-8') print('getmessage:'+data2) exceptConnectionError: print('connecterror') sys.exit(-1) except: print('unexpecterror') sys.exit(-1) s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) bind() listen() conn,addr=s.accept() print("connectsuccess") print('connecttime:'+time.ctime()) threading._start_new_thread(recv,(conn,)) send_sth(conn) if__name__=='__main__': server()
开启多线程有2种方法,上面2个程序都是用函数的方法,还有一种方法是用类继承threading类
代码:
importsocket importthreading classclient(threading.Thread): def__init__(self,sth): threading.Thread.__init__(self) self.sth=sth defrun(self): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) ip="127.0.0.1" try: s.connect((ip,8888)) except: print('conerror') exit() #print("connectsuccess") s.sendall(self.sth.encode('utf-8')) #print("sendsuccess") try: r=s.recv(1024) except: print('recverror') exit() print(r.decode('utf-8')) c1=client('hello1') c1.start() c2=client('hello2') c2.start()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。