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访问MySQL封装的常用类实例
Nov 11 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Python的语言类型(详解)
Jun 24 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
python实现人脸识别经典算法(一) 特征脸法
Mar 13 Python
对Python使用mfcc的两种方式详解
Jan 09 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
python 函数中的内置函数及用法详解
Jul 02 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
Python编程快速上手——PDF文件操作案例分析
Feb 28 Python
python函数指定默认值的实例讲解
Mar 29 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脚本的10个技巧(6)
2006/10/09 PHP
PHP计划任务之关闭浏览器后仍然继续执行的函数
2010/07/22 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
PHP Opcache安装和配置方法介绍
2015/05/28 PHP
php+redis消息队列实现抢购功能
2018/02/08 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
javascript实现二分查找法实现代码
2007/11/12 Javascript
jquery ui dialog实现弹窗特效的思路及代码
2013/08/03 Javascript
node-http-proxy修改响应结果实例代码
2016/06/06 Javascript
canvas绘制多边形
2017/02/24 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
如何在vue中使用jointjs过程解析
2020/05/29 Javascript
Python通过解析网页实现看报程序的方法
2014/08/04 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
使用Python对微信好友进行数据分析
2018/06/27 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
用uWSGI和Nginx部署Flask项目的方法示例
2019/05/05 Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
2019/06/19 Python
python切片(获取一个子列表(数组))详解
2019/08/09 Python
jupyter lab文件导出/下载方式
2020/04/22 Python
Python中有几个关键字
2020/06/04 Python
Python操作MySQL数据库的示例代码
2020/07/13 Python
如何用Python绘制3D柱形图
2020/09/16 Python
如何用python批量调整视频声音
2020/12/22 Python
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
香港草莓网:Strawberrynet香港
2019/05/10 全球购物
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
大学学风建设方案
2014/05/04 职场文书
应聘教师自荐书
2014/06/16 职场文书
民事诉讼代理授权委托书范本
2014/10/08 职场文书
追悼会悼词大全
2015/06/23 职场文书