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在windows命令行下输出彩色文字的方法
Mar 19 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 Python
Python基于回溯法子集树模板解决数字组合问题实例
Sep 02 Python
Python基于贪心算法解决背包问题示例
Nov 27 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
Windows下Python3.6安装第三方模块的方法
Nov 22 Python
python 检查是否为中文字符串的方法
Dec 28 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
python如何使用Redis构建分布式锁
Jan 16 Python
python实现测试工具(一)——命令行发送get请求
Oct 19 Python
PyCharm常用配置和常用插件(小结)
Feb 06 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 获取远程文件内容的函数代码
2010/03/24 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
2012/02/04 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
2017/07/22 PHP
用于table内容排序
2006/07/21 Javascript
Extjs中DisplayField的日期或者数字格式化扩展
2010/09/03 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
JS倒计时代码汇总
2014/11/25 Javascript
jquery实现左右无缝轮播图
2020/07/31 Javascript
Vue.js表单控件实践
2016/10/27 Javascript
jQuery日程管理控件glDatePicker用法详解
2017/03/29 jQuery
react实现一个优雅的图片占位模块组件详解
2017/10/30 Javascript
webpack之引入图片的实现及问题
2018/10/08 Javascript
Javascript实现单选框效果
2020/12/09 Javascript
跟老齐学Python之折腾一下目录
2014/10/24 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
Python Matplotlib 基于networkx画关系网络图
2019/07/10 Python
django从后台返回html代码的实例
2020/03/11 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
django中嵌套的try-except实例
2020/05/21 Python
python用tkinter实现一个简易能进行随机点名的界面
2020/09/27 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
39美元购买一副眼镜或太阳镜:39DollarGlasses.com
2018/06/17 全球购物
十一个高级MySql面试题
2014/10/06 面试题
海南地接欢迎词
2014/01/14 职场文书
国贸专业的职业规划范文
2014/01/23 职场文书
致百米运动员广播稿
2014/01/29 职场文书
高中体育教学反思
2014/01/29 职场文书
西式结婚主持词
2014/03/14 职场文书
联谊会主持词
2014/03/26 职场文书
2014年餐厅服务员工作总结
2014/11/18 职场文书
行政主管岗位职责
2015/02/03 职场文书
2019各种承诺书范文
2019/06/24 职场文书
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
2021/08/30 Python