python实现点对点聊天程序

 更新时间:2018年07月28日 08:44:17   作者:csuzhucong  
这篇文章主要为大家详细介绍了python实现点对点聊天程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

client代码:

import socket
import sys
import threading
import 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 socket
import sys
import threading
import 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 socket
import threading
class 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()

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

相关文章

  • Python多重继承之菱形继承的实例详解

    Python多重继承之菱形继承的实例详解

    继承是面向对象编程的一个重要的方式,通过继承,子类就可以扩展父类的功能。这篇文章主要介绍了Python多重继承之菱形继承,需要的朋友可以参考下
    2020-02-02
  • PyCharm中New Directory 和 New Python Package的区别解析

    PyCharm中New Directory 和 New Python 

    python package这是一个特殊的目录,因为在创建该python package的时候,系统会自动地生成一个py文件, init.py,这篇文章主要介绍了PyCharm中New Directory 和 New Python Package的区别,需要的朋友可以参考下
    2023-12-12
  • Python中requests库的基本概念与具体使用方法

    Python中requests库的基本概念与具体使用方法

    requests库是用python编写的基于urllib,requests唯一的一个非转基因的Python HTTP库,下面这篇文章主要给大家介绍了关于Python中requests库的基本概念与具体使用方法,需要的朋友可以参考下
    2022-08-08
  • python音频处理的示例详解

    python音频处理的示例详解

    这篇文章主要介绍了python音频处理的示例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • python实现在每个独立进程中运行一个函数的方法

    python实现在每个独立进程中运行一个函数的方法

    这篇文章主要介绍了python实现在每个独立进程中运行一个函数的方法,涉及Python操作进程的相关技巧,需要的朋友可以参考下
    2015-04-04
  • 详解Python中where()函数的用法

    详解Python中where()函数的用法

    本篇文章主要介绍了详解Python中where()函数的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 用Python绘制一个仿黑洞图像

    用Python绘制一个仿黑洞图像

    黑洞图像大家都知道,毕竟前几年刚发布的时候曾火遍全网,甚至都做成表情包了。本文就来用Python绘制一个仿黑洞图像,希望大家能够喜欢
    2023-02-02
  • 使用Python创建快捷方式管理应用

    使用Python创建快捷方式管理应用

    在Windows系统中,快速访问常用程序通常通过“开始菜单”中的“应用热门”功能实现,在这篇博客中,我将向你展示如何使用Python和wxPython创建一个GUI应用,帮助用户轻松将桌面上的快捷方式添加到Windows“开始菜单”的“应用热门”中,需要的朋友可以参考下
    2024-08-08
  • python中pytest收集用例规则与运行指定用例详解

    python中pytest收集用例规则与运行指定用例详解

    这篇文章主要介绍了python中pytest收集用例规则与运行指定用例详解,天会讲解一下pytest是如何收集我们写好的用例?我们又有哪些方式来运行单个用例或者批量运行用例呢,需要的朋友可以参考下
    2019-06-06
  • Python接口自动化测试框架运行原理及流程

    Python接口自动化测试框架运行原理及流程

    这篇文章主要介绍了Python接口自动化测试框架运行原理及流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11

最新评论