python实现点对点聊天程序


Posted in Python onJuly 28, 2018

用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中MySQLdb模块用法实例
Nov 10 Python
python中的字典使用分享
Jul 31 Python
Python实现向服务器请求压缩数据及解压缩数据的方法示例
Jun 09 Python
Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】
Dec 11 Python
详解Python装饰器
Mar 25 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
树莓派动作捕捉抓拍存储图像脚本
Jun 22 Python
Python简单处理坐标排序问题示例
Jul 11 Python
基于Django OneToOneField和ForeignKey的区别详解
Mar 30 Python
jupyter notebook参数化运行python方式
Apr 10 Python
PyQt实现计数器的方法示例
Jan 18 Python
如何在Python中创建二叉树
Mar 30 Python
基于python实现聊天室程序
Jul 27 #Python
Python中return self的用法详解
Jul 27 #Python
TensorFlow打印tensor值的实现方法
Jul 27 #Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 27 #Python
Tensorflow 同时载入多个模型的实例讲解
Jul 27 #Python
Tensorflow加载预训练模型和保存模型的实例
Jul 27 #Python
Python解决走迷宫问题算法示例
Jul 27 #Python
You might like
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
一个经典的PHP文件上传类分享
2014/11/18 PHP
接收键盘指令的脚本
2006/06/26 Javascript
JS getStyle获取最终样式函数代码
2010/04/01 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
javascript实现瀑布流自适应遇到的问题及解决方案
2015/01/28 Javascript
详解JavaScript中的Unescape()和String() 函数
2015/11/09 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
jQuery插件FusionCharts绘制的3D环饼图效果示例【附demo源码】
2017/04/02 jQuery
Angular简单验证功能示例
2017/12/22 Javascript
Vue数据监听方法watch的使用
2018/03/28 Javascript
微信小程序排坑指南详解
2018/05/23 Javascript
vue下的@change事件的实现
2019/10/25 Javascript
JS+CSS+HTML实现“代码雨”类似黑客帝国文字下落效果
2020/03/17 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
Python3读取文件常用方法实例分析
2015/05/22 Python
Python处理文本文件中控制字符的方法
2017/02/07 Python
python爬虫的工作原理
2017/03/05 Python
python实现定时自动备份文件到其他主机的实例代码
2018/02/23 Python
通过Py2exe将自己的python程序打包成.exe/.app的方法
2018/05/26 Python
numpy中以文本的方式存储以及读取数据方法
2018/06/04 Python
python爬虫 urllib模块反爬虫机制UA详解
2019/08/20 Python
美国真皮手袋品牌:GiGi New York
2017/03/10 全球购物
AJAX的优缺点都有什么
2015/08/18 面试题
自荐信格式写作方法有哪些呢
2013/11/20 职场文书
皮肤科医师岗位职责
2013/12/04 职场文书
护士辞职信模板
2014/01/20 职场文书
大二法学专业职业生涯规划范文
2014/02/12 职场文书
2014教师党员自我评议总结
2014/09/19 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
小学校长个人总结
2015/03/03 职场文书
证券公司客户经理岗位职责
2015/04/09 职场文书
农民工工资承诺书大全
2015/05/04 职场文书
生日寿星公答谢词
2015/09/29 职场文书
html+css 实现简易导航栏功能
2021/04/07 HTML / CSS