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的三目运算符和not in运算符使用示例
Mar 03 Python
详解 Python 与文件对象共事的实例
Sep 11 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
Jul 17 Python
python 检查文件mime类型的方法
Dec 08 Python
对pandas写入读取h5文件的方法详解
Dec 28 Python
python SVM 线性分类模型的实现
Jul 19 Python
python机器学习包mlxtend的安装和配置详解
Aug 21 Python
python安装virtualenv虚拟环境步骤图文详解
Sep 18 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
Python爬虫基于lxml解决数据编码乱码问题
Jul 31 Python
Python就将所有的英文单词首字母变成大写
Feb 12 Python
python 爬取哔哩哔哩up主信息和投稿视频
Jun 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
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
对象失去焦点时自己动提交数据的实现代码
2012/11/06 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
php无限极分类实现方法分析
2019/07/04 PHP
php设计模式之抽象工厂模式分析【星际争霸游戏案例】
2020/01/23 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
10款新鲜出炉的 jQuery 插件(Ajax 插件,有幻灯片、图片画廊、菜单等)
2011/06/08 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
jQuery 选择器详解
2015/01/19 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
巧用Vue.js+Vuex制作专门收藏微信公众号的app
2016/11/03 Javascript
JavaScript实现各种排序的代码详解
2017/08/28 Javascript
基于bootstrap写的一点localStorage本地储存
2017/11/21 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
js判断节假日实例代码
2017/12/27 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
vue-cli的工程模板与构建工具详解
2018/09/27 Javascript
angular中两种表单的区别(响应式和模板驱动表单)
2018/12/06 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
JS实现获取数组中最大值或最小值功能示例
2019/03/02 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
三剑客:offset、client和scroll还傻傻分不清?
2020/12/04 Javascript
python代码编写计算器小程序
2020/03/30 Python
Django项目主urls导入应用中views的红线问题解决
2019/08/10 Python
Python定义函数实现累计求和操作
2020/05/03 Python
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
Java基础面试题
2012/11/02 面试题
物流管理专业职业生涯规划书
2014/01/06 职场文书
大学军训感言1000字
2014/02/25 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python