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 3中实现类型检查器的简单方法
Jul 03 Python
Python序列循环移位的3种方法推荐
Apr 09 Python
Django model反向关联名称的方法
Dec 15 Python
python样条插值的实现代码
Dec 17 Python
python3实现点餐系统
Jan 24 Python
Django模板Templates使用方法详解
Jul 19 Python
详解Python图像处理库Pillow常用使用方法
Sep 02 Python
解决python 读取excel时 日期变成数字并加.0的问题
Oct 08 Python
python实现大战外星人小游戏实例代码
Dec 26 Python
TFRecord文件查看包含的所有Features代码
Feb 17 Python
python3中的logging记录日志实现过程及封装成类的操作
May 12 Python
python对输出的奇数偶数排序实例代码
Dec 04 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相当简单的分页类
2008/10/02 PHP
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
PHP spl_autoload_register实现自动加载研究
2011/12/06 PHP
比较完整的微信开发php代码
2016/08/02 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
PHP convert_cyr_string()函数讲解
2019/02/13 PHP
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
使用jQuery+HttpHandler+xml模拟一个三级联动的例子
2011/08/09 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
2015/04/03 Javascript
CascadeView级联组件实现思路详解(分离思想和单链表)
2016/04/12 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
javascript for循环性能测试示例
2019/08/07 Javascript
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
Django实现单用户登录的方法示例
2019/03/28 Python
在python中将list分段并保存为array类型的方法
2019/07/15 Python
Django admin model 汉化显示文字的实现方法
2019/08/12 Python
Python线程指南分享
2019/11/19 Python
在OpenCV里使用Camshift算法的实现
2019/11/22 Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
2020/02/11 Python
python新式类和经典类的区别实例分析
2020/03/23 Python
keras Lambda自定义层实现数据的切片方式,Lambda传参数
2020/06/11 Python
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
数据库基础的一些面试题
2012/02/25 面试题
do you have any Best Practice for testing
2016/06/04 面试题
人力资源主管职责范本
2014/03/05 职场文书
搞笑爱情保证书
2014/04/29 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
2015年信访维稳工作总结
2015/04/07 职场文书
幼儿园园务工作总结2015
2015/05/18 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python