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中星号变量的几种特殊用法
Sep 07 Python
Django视图之ORM数据库查询操作API的实例
Oct 27 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
NumPy 数组使用大全
Apr 25 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
windows下python虚拟环境virtualenv安装和使用详解
Jul 16 Python
详解numpy.meshgrid()方法使用
Aug 01 Python
Pycharm插件(Grep Console)自定义规则输出颜色日志的方法
May 27 Python
Python如何输出警告信息
Jul 30 Python
Python调用jar包方法实现过程解析
Aug 11 Python
用Python实现童年贪吃蛇小游戏功能的实例代码
Dec 07 Python
python学习之panda数据分析核心支持库
May 07 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
一个用于MySQL的PHP XML类
2006/10/09 PHP
smarty的保留变量问题
2008/10/23 PHP
php jsonp单引号转义
2014/11/23 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
PHP等比例压缩图片的实例代码
2018/07/26 PHP
硬盘浏览程序,保存成网页格式便可使用
2006/12/03 Javascript
jQuery ul标签下拉菜单演示代码
2010/12/11 Javascript
js实现局部页面打印预览原理及示例代码
2014/07/03 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
2015/12/16 Javascript
深入解析jQuery中Deferred的deferred.promise()方法
2016/05/03 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
浅谈在Vue-cli里基于axios封装复用请求
2017/11/06 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
VUE2.0+ElementUI2.0表格el-table实现表头扩展el-tooltip
2018/11/30 Javascript
Vue快速实现通用表单验证功能
2019/12/05 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
天翼开放平台免费短信验证码接口使用实例
2013/12/18 Python
Python实现给文件添加内容及得到文件信息的方法
2015/05/28 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
python中pika模块问题的深入探究
2018/10/13 Python
Python函数返回不定数量的值方法
2019/01/22 Python
Python 编程速成(推荐)
2019/04/15 Python
Django中在xadmin中集成DjangoUeditor过程详解
2019/07/24 Python
python文字和unicode/ascll相互转换函数及简单加密解密实现代码
2019/08/12 Python
Python安装OpenCV的示例代码
2020/03/05 Python
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
怎样写留学自荐信
2013/11/11 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
低碳环保标语
2014/06/12 职场文书
运动会演讲稿100字
2014/08/25 职场文书
2014年最新离婚协议书范本
2014/10/11 职场文书
2015年学生会干事工作总结
2015/04/09 职场文书
公司搬迁通知
2015/04/20 职场文书
2019自荐信范文集锦!
2019/07/03 职场文书
Spring Boot 底层原理基础深度解析
2022/04/03 Java/Android