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的web.py框架下的application.py模块
May 02 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
Python实战小程序利用matplotlib模块画图代码分享
Dec 09 Python
python线程池threadpool实现篇
Apr 27 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
python中dir()与__dict__属性的区别浅析
Dec 10 Python
django开发post接口简单案例,获取参数值的方法
Dec 11 Python
Python实现Selenium自动化Page模式
Jul 14 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
Aug 09 Python
python中对_init_的理解及实例解析
Oct 11 Python
pandas 中对特征进行硬编码和onehot编码的实现
Dec 20 Python
selenium与xpath之获取指定位置的元素的实现
Jan 26 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/01/03 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
php分享朋友圈的实现代码
2019/02/18 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
2015/02/13 Javascript
JavaScript中isPrototypeOf函数作用和使用实例
2015/06/01 Javascript
jQuery简单实现tab选项卡切换效果
2016/06/20 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
2016/08/15 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
vue2.0在没有dev-server.js下的本地数据配置方法
2018/02/23 Javascript
Vue.js 动态为img的src赋值方法
2018/03/14 Javascript
微信小程序画布圆形进度条显示效果
2020/11/17 Javascript
微信小程序自定义弹窗wcPop插件
2018/11/19 Javascript
在vue中根据光标的显示与消失实现下拉列表
2019/09/29 Javascript
2020淘宝618理想生活列车自动领喵币js脚本的代码
2020/06/02 Javascript
Vue组件间数据传递的方式(3种)
2020/07/13 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
Python字符串、元组、列表、字典互相转换的方法
2016/01/23 Python
python 容器总结整理
2017/04/04 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
python 接收处理外带的参数方法
2018/12/03 Python
基于python if 判断选择结构的实例详解
2019/05/06 Python
django url到views参数传递的实例
2019/07/19 Python
python爬虫实例之获取动漫截图
2020/05/31 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
公司投资建议书
2014/05/16 职场文书
本科生就业推荐信
2014/05/19 职场文书
火锅店的活动方案
2014/08/15 职场文书
党员考试作弊检讨书1000字
2015/02/16 职场文书
2016春节慰问信范文
2015/03/25 职场文书
运动会宣传稿100字
2015/07/23 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python