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的Supervisor进行进程监控以及自动启动
May 29 Python
Python中除法使用的注意事项
Aug 21 Python
基于Python实现的百度贴吧网络爬虫实例
Apr 17 Python
python中numpy包使用教程之数组和相关操作详解
Jul 30 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
详解Numpy中的广播原则/机制
Sep 20 Python
Python pycharm 同时加载多个项目的方法
Jan 17 Python
对python 中class与变量的使用方法详解
Jun 26 Python
Python字符串格式化输出代码实例
Nov 22 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
Feb 27 Python
python 中的paramiko模块简介及安装过程
Feb 29 Python
python cookie反爬处理的实现
Nov 01 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桌面中心(一) 创建数据库
2007/03/11 PHP
php的大小写敏感问题整理
2011/12/29 PHP
C/S和B/S两种架构区别与优缺点分析
2014/10/23 PHP
PHP进程同步代码实例
2015/02/12 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
javascript处理表单示例(javascript提交表单)
2014/04/28 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
JavaScript简单生成 N~M 之间随机数的方法
2017/01/13 Javascript
基于jQuery实现文字打印动态效果
2017/04/21 jQuery
详解JS中的this、apply、call、bind(经典面试题)
2017/09/19 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue项目每30秒刷新1次接口的实现方法
2018/12/04 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
[46:58]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第一场 12.17
2020/12/19 DOTA
深入理解python中的atexit模块
2017/03/07 Python
python 获取网页编码方式实现代码
2017/03/11 Python
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
Python之os操作方法(详解)
2017/06/15 Python
Python字典循环添加一键多值的用法实例
2019/01/20 Python
使用Python进行体育竞技分析(预测球队成绩)
2019/05/16 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
Python中os模块功能与用法详解
2020/02/26 Python
Django前后端分离csrf token获取方式
2020/12/25 Python
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
机电一体化大学生求职信
2013/11/08 职场文书
保护环境的标语
2014/06/09 职场文书
应急管理培训方案
2014/06/12 职场文书
租房协议书范文
2014/08/20 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
搞笑欢迎词大全
2015/09/30 职场文书
导游词之无锡华莱坞
2019/12/02 职场文书
使用Oracle跟踪文件的问题详解
2021/06/28 Oracle