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中使用ElementTree解析XML示例
Jun 02 Python
Python教程之全局变量用法
Jun 27 Python
Python进程间通信之共享内存详解
Oct 30 Python
Python中函数参数调用方式分析
Aug 09 Python
Python装饰器简单用法实例小结
Dec 03 Python
python导包的几种方法(自定义包的生成以及导入详解)
Jul 15 Python
python自动化工具之pywinauto实例详解
Aug 26 Python
python求质数列表的例子
Nov 24 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
python中doctest库实例用法
Dec 31 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
Jan 22 Python
django中websocket的具体使用
Jan 22 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实现图片按比例截取的方法
2017/02/06 PHP
PHP 面向对象程序设计之类属性与类常量实现方法分析
2020/04/13 PHP
jquery 使用点滴函数代码
2011/05/20 Javascript
js实现分享到随页面滚动而滑动效果的方法
2015/04/10 Javascript
jQuery validate验证插件使用详解
2016/05/11 Javascript
JS及PHP代码编写八大排序算法
2016/07/12 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
关于Jquery中的事件绑定总结
2016/10/26 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
2017/04/27 Javascript
vue中添加mp3音频文件的方法
2018/03/02 Javascript
react高阶组件添加和删除props
2019/04/26 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
django简单的前后端分离的数据传输实例 axios
2020/05/18 Javascript
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
Python基于pygame模块播放MP3的方法示例
2017/09/30 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
python实现随机梯度下降(SGD)
2020/03/24 Python
pandas对指定列进行填充的方法
2018/04/11 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
Python3 文章标题关键字提取的例子
2019/08/26 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
2020/01/04 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
Numpy(Pandas)删除全为零的列的方法
2020/09/11 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
绘画设计学生的个人自我评价
2013/09/20 职场文书
学院领导推荐信
2013/10/30 职场文书
小学新教师培训方案
2014/02/03 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
2019 入党申请书范文
2019/07/10 职场文书
话题作文之学会尊重
2019/12/16 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
新手必备之MySQL msi版本下载安装图文详细教程
2021/05/21 MySQL
Java中使用Filter过滤器的方法
2021/06/28 Java/Android
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP