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实现的Google IP 可用性检测脚本
Apr 23 Python
讲解Python中fileno()方法的使用
May 24 Python
在windows系统中实现python3安装lxml
Mar 23 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
Dec 12 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
Apr 17 Python
numpy.transpose对三维数组的转置方法
Apr 17 Python
Python实现的生产者、消费者问题完整实例
May 30 Python
Python实现拷贝/删除文件夹的方法详解
Aug 29 Python
python实现诗歌游戏(类继承)
Feb 26 Python
Django的Modelforms用法简介
Jul 27 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
python基于opencv批量生成验证码的示例
Apr 28 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中使用explode查找某个字符是否存在的方法
2011/07/12 PHP
PHP生成sitemap.xml地图函数
2013/11/13 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
Add a Formatted Table to a Word Document
2007/06/15 Javascript
js cookies 常见网页木马挂马代码 24小时只加载一次
2009/04/13 Javascript
JQuery 实现的页面滚动时浮动窗口控件
2009/07/10 Javascript
js substring从右边获取指定长度字符串(示例代码)
2013/12/23 Javascript
JS获取select-option-text_value的方法
2013/12/26 Javascript
网页广告中JS代码的信息监听示例
2014/04/02 Javascript
JavaScript中操作字符串之localeCompare()方法的使用
2015/06/06 Javascript
JavaScript编程中布尔对象的基本使用
2015/10/25 Javascript
JQuery zClip插件实现复制页面内容到剪贴板
2015/11/02 Javascript
Bootstrap笔记之缩略图、警告框实例详解
2017/03/09 Javascript
利用js查找数组中指定元素并返回该元素的所有索引示例
2017/03/29 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
javascript 中select框触发事件过程的分析
2017/08/01 Javascript
Python聚类算法之基本K均值实例详解
2015/11/20 Python
python利用拉链法实现字典方法示例
2017/03/25 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
python之生成多层json结构的实现
2020/02/27 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python json转字典字符方法实例解析
2020/04/13 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
英国奢侈品网站:MatchesFashion
2016/12/16 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
大学生开西餐厅创业计划书
2014/02/01 职场文书
美化环境标语
2014/06/20 职场文书
群众路线学习笔记范文
2014/11/06 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python
pandas时间序列之pd.to_datetime()的实现
2022/06/16 Python