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实现360的字符显示界面
Feb 21 Python
python实现得到一个给定类的虚函数
Sep 28 Python
Python常用随机数与随机字符串方法实例
Apr 09 Python
Python自动扫雷实现方法
Jul 25 Python
python 编程之twisted详解及简单实例
Jan 28 Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
对PyQt5基本窗口控件 QMainWindow的使用详解
Jun 19 Python
使用Python制作一个打字训练小工具
Oct 01 Python
OpenCV里的imshow()和Matplotlib.pyplot的imshow()的实现
Nov 25 Python
python模式 工厂模式原理及实例详解
Feb 11 Python
地图可视化神器kepler.gl python接口的使用方法
Dec 22 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文件下载处理方法分析
2015/04/22 PHP
php 中self,this的区别和操作方法实例分析
2019/11/04 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
javascript下判断一个对象是否具有指定名称的属性的的代码
2010/01/11 Javascript
Javascript 类与静态类的实现
2010/04/01 Javascript
jquery二级导航内容均分的原理及实现
2013/08/13 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
js实现三张图(文)片一起切换的banner焦点图
2015/08/25 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
关于jQuery中fade(),show()起始位置的一点小发现
2017/04/25 jQuery
Vue编写多地区选择组件
2017/08/21 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
谈谈JS中的!!
2017/12/07 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
讲解vue-router之什么是动态路由
2018/05/28 Javascript
nuxt.js 在middleware(中间件)中实现路由鉴权操作
2020/11/06 Javascript
解决element-ui的下拉框有值却无法选中的情况
2020/11/07 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
python3.0 字典key排序
2008/12/24 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
Python函数参数类型及排序原理总结
2019/12/19 Python
python中id函数运行方式
2020/07/03 Python
HTML5跳转小程序wx-open-launch-weapp的示例代码
2020/07/16 HTML / CSS
飞利浦比利时官方网站:Philips比利时
2016/08/24 全球购物
英国运动服、设备及配件网站:DW Sports
2019/12/04 全球购物
线程同步的方法
2016/11/23 面试题
酒店工作职员求职简历的自我评价
2013/10/23 职场文书
中国好声音华少广告词
2014/03/17 职场文书
应届毕业生自荐信
2014/05/28 职场文书
物业管理专业求职信
2014/06/11 职场文书
2014企业年终工作总结
2014/12/23 职场文书
拾金不昧表扬信
2015/01/16 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
安全教育观后感
2015/06/17 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python