首页 > 编程 > Python > 正文

python实现点对点聊天程序

2020-01-04 14:48:20
字体:
来源:转载
供稿:网友

用Python实现点对点的聊天,2个程序,一个是client.py,一个是server.py,通过本机地址127.0.0.1连接进行通信,利用多线程把发送消息和接收消息分开独立进行。

client代码:

import socketimport sysimport threadingimport time class client(): def __init__(self):  self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  self.ip = "127.0.0.1"  def connect(self):  try:   self.s.connect((self.ip,8888))   print("connect success")   print('connect time: '+time.ctime())  except ConnectionError:   print('connect error')   sys.exit(-1)  except:   print('unexpect error')   sys.exit(-1)  def send_sth(self):  while True:   sth=input('say something:/n')   try:    self.s.sendall(sth.encode('utf-8'))   except ConnectionError:    print('connect error')    sys.exit(-1)   except:    print('unexpect error')    sys.exit(-1)  def receive(self):  while True:   try:    r=self.s.recv(1024)    print ('get message:'+r.decode('utf-8'))   except ConnectionError:    print('connect error')    sys.exit(-1)   except:    print('unexpect error')    sys.exit(-1) c1 = client()c1.connect()threading._start_new_thread(c1.receive,())c1.send_sth()

server代码:

import socketimport sysimport threadingimport time def server(): def bind():  HOST='127.0.0.1'  s.bind((HOST,8888))  print("bind ok")  def listen():  s.listen(10)  print ('Socket now listening')  def send_sth(conn):  while True:   try:    sth=input('say something:/n')    conn.sendall(sth.encode('utf-8'))   except ConnectionError:    print('connect error')    sys.exit(-1)   except:    print('unexpect error')    sys.exit(-1)  def recv(conn):   while True:   try:    data=conn.recv(1024)    data2=data.decode('utf-8')    print('get message:'+data2)   except ConnectionError:    print('connect error')    sys.exit(-1)   except:    print('unexpect error')    sys.exit(-1)  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) bind() listen() conn,addr=s.accept() print("connect success") print('connect time: '+time.ctime()) threading._start_new_thread(recv,(conn,)) send_sth(conn) if __name__=='__main__': server()

开启多线程有2种方法,上面2个程序都是用函数的方法,还有一种方法是用类继承threading类

代码:

import socketimport threadingclass client(threading.Thread): def __init__(self,sth):  threading.Thread.__init__(self)  self.sth=sth def run(self):  s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)  ip="127.0.0.1"  try:   s.connect((ip,8888))  except :   print('con error')   exit()  #print("connect success")  s.sendall(self.sth.encode('utf-8'))  #print("send success")  try:   r=s.recv(1024)  except:   print('recv error')   exit()  print (r.decode('utf-8'))c1=client('hello 1')c1.start()c2=client('hello 2')c2.start()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VEVB武林网。


注:相关教程知识阅读请移步到python教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表