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调用C语言的方法【基于ctypes模块】
Jan 22 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
selenium+python实现自动登陆QQ邮箱并发送邮件功能
Dec 13 Python
如何使用Python多线程测试并发漏洞
Dec 18 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
Apr 08 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
在keras中实现查看其训练loss值
Jun 16 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
Aug 18 Python
Python中openpyxl实现vlookup函数的实例
Oct 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图片的裁剪与缩放生成符合需求的缩略图
2013/01/11 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
PHP从数组中删除元素的四种方法实例
2017/05/12 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
javascript 拖放效果实现代码
2010/01/22 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
jquery使用animate方法实现控制元素移动
2015/03/27 Javascript
JS去除iframe滚动条的方法
2015/04/01 Javascript
jquery实现简单实用的弹出层效果代码
2015/10/15 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
angular-tree-component的使用详解
2018/07/30 Javascript
angular2实现统一的http请求头方法
2018/08/13 Javascript
微信小程序实现星级评价效果
2018/12/28 Javascript
javascript设计模式 ? 享元模式原理与用法实例分析
2020/04/15 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
python私有属性和方法实例分析
2015/01/15 Python
Python爬取读者并制作成PDF
2015/03/10 Python
以Flask为例讲解Python的框架的使用方法
2015/04/29 Python
浅谈scrapy 的基本命令介绍
2017/06/13 Python
Python聊天室程序(基础版)
2018/04/01 Python
利用pandas将非数值数据转换成数值的方式
2019/12/18 Python
详解Python实现进度条的4种方式
2020/01/15 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
HTML5中原生的右键菜单创建方法
2016/06/28 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
上课迟到检讨书
2014/01/19 职场文书
班主任与学生安全责任书
2014/07/25 职场文书
2014学生会工作总结报告
2014/12/02 职场文书
军训新闻稿范文
2015/07/17 职场文书
2015年党风廉政建设个人总结
2015/08/18 职场文书
干部外出学习心得体会
2016/01/18 职场文书
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS