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 相关文章推荐
Python3实现从文件中读取指定行的方法
May 22 Python
编写自定义的Django模板加载器的简单示例
Jul 21 Python
Python使用Redis实现作业调度系统(超简单)
Mar 22 Python
Python中的多行注释文档编写风格汇总
Jun 16 Python
Python绑定方法与非绑定方法详解
Aug 18 Python
pycharm运行出现ImportError:No module named的解决方法
Oct 13 Python
Python文件循环写入行时防止覆盖的解决方法
Nov 09 Python
python对视频画框标记后保存的方法
Dec 07 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
基于python实现音乐播放器代码实例
Jul 01 Python
python中uuid模块实例浅析
Dec 29 Python
Pandas数据结构之Series的使用
Mar 31 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/08 PHP
用PHP和Shell写Hadoop的MapReduce程序
2014/04/15 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
PHPUnit测试私有属性和方法功能示例
2018/06/12 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
jquery数组过滤筛选方法grep()简介
2014/06/06 Javascript
AngularJS学习第二篇 AngularJS依赖注入
2017/02/13 Javascript
nodejs利用ajax实现网页无刷新上传图片实例代码
2017/06/06 NodeJs
vue.js移动数组位置,同时更新视图的方法
2018/03/08 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
python的re模块应用实例
2014/09/26 Python
Python中不同进制的语法及转换方法分析
2016/07/27 Python
Python3 中把txt数据文件读入到矩阵中的方法
2018/04/27 Python
Django连接数据库并实现读写分离过程解析
2019/11/13 Python
Python3实现mysql连接和数据框的形成(实例代码)
2020/01/17 Python
TensorFlow2.X结合OpenCV 实现手势识别功能
2020/04/08 Python
使用Python实现将多表分批次从数据库导出到Excel
2020/05/15 Python
解决在keras中使用model.save()函数保存模型失败的问题
2020/05/21 Python
简述python Scrapy框架
2020/08/17 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
html5的localstorage详解
2017/05/09 HTML / CSS
使用SVG实现提示框功能的示例代码
2020/06/05 HTML / CSS
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
计算机操作自荐信
2013/12/07 职场文书
建议书标准格式
2014/03/12 职场文书
授权委托书格式模板
2014/04/03 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
工程项目合作意向书
2015/05/08 职场文书
2019财务管理制度最新范本!
2019/07/09 职场文书
Pandas数据结构之Series的使用
2022/03/31 Python
Android Rxjava3 使用场景详解
2022/04/07 Java/Android