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入门篇之对象类型
Oct 17 Python
使用C语言来扩展Python程序和Zope服务器的教程
Apr 14 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
May 09 Python
Python中一般处理中文的几种方法
Mar 06 Python
检测python爬虫时是否代理ip伪装成功的方法
Jul 12 Python
如何运行带参数的python脚本
Nov 15 Python
python实现处理mysql结果输出方式
Apr 09 Python
python单元测试框架pytest的使用示例
Oct 07 Python
python垃圾回收机制原理分析
Apr 13 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数据对象PDO操作技巧小结
2016/09/27 PHP
php头像上传预览实例代码
2017/05/02 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
jQuery 自定义下拉框(DropDown)附源码下载
2016/07/22 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
微信小程序定位当前城市的方法
2018/07/19 Javascript
vue.js层叠轮播效果的实例代码
2018/11/08 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
element-ui表格合并span-method的实现方法
2019/05/21 Javascript
vue iview的菜单组件Mune 点击不高亮的解决方案
2019/11/01 Javascript
JavaScript快速调试的两个技巧
2020/11/04 Javascript
python中的列表推导浅析
2014/04/26 Python
基于python 字符编码的理解
2017/09/02 Python
python生成圆形图片的方法
2020/03/25 Python
python修改txt文件中的某一项方法
2018/12/29 Python
python算法与数据结构之冒泡排序实例详解
2019/06/22 Python
python将类似json的数据存储到MySQL中的实例
2019/07/12 Python
Python爬虫 bilibili视频弹幕提取过程详解
2019/07/31 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
python 二维矩阵转三维矩阵示例
2019/11/30 Python
python函数不定长参数使用方法解析
2019/12/14 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
css3的图形3d翻转效果应用示例
2014/04/08 HTML / CSS
简单总结CSS3中视窗单位Viewport的常见用法
2016/02/04 HTML / CSS
沃尔玛旗下墨西哥超市:Bodega Aurrera
2020/11/13 全球购物
外贸业务员岗位职责
2013/11/24 职场文书
六年级数学教学反思
2014/02/03 职场文书
物业工程部岗位职责
2015/02/11 职场文书
经费申请报告范文
2015/05/18 职场文书
中学教师教学工作总结
2015/08/13 职场文书
分享几个JavaScript运算符的使用技巧
2021/04/24 Javascript
PHP 时间处理类Carbon
2022/05/20 PHP