Python socket模块方法实现详解


Posted in Python onNovember 05, 2019

这篇文章主要介绍了Python socket模块方法实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

socket ssh (不带防止粘包的方法)

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com

import socket
import os

server = socket.socket()
server.bind(('localhost', 6969)) #绑定被监听端口
server.listen(5)  #监听端口
while True:
  print("我要开始等电话了")
  conn, addr = server.accept() # 就是等待的意思
  #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例
  print("电话来了%s"% [conn, addr])
  while True:
    data = conn.recv(1024)
    if not data:
      print('client is lost.')
      break
    # res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果
    # with open('filename', 'r') as ret: #这两行就 可以用过来传输文件了。
    #   data = ret.read()
    print('receive:',data)
    conn.send(data.upper())
server.close()

socket client 模块

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com

import socket


client = socket.socket() #声明socket类型,同时生成socket链接对象
client.connect(('localhost',6969))  #localhost就是本机地址

while True:
  msg = input('input msg >>:').strip()
  if len(msg) == 0: continue #检查msg的信息,防止无输入信息
  #client.send(b"Hello, world!") #发送信息
  client.send(msg.encode('utf-8'))

  data = client.recv(1024) #默认接受1024字节,就是1k
  # with open('filename', 'w') as ret: # 这两行就 可以用过来传输文件了。
  #   ret = data.write()
  print(data.decode())
client.close() #关闭端口

防止粘包的socket_ssh.py

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com

import socket
import os

server = socket.socket()
server.bind(('localhost', 6969)) #绑定被监听端口
server.listen(5)  #监听端口
while True:
  print("我要开始等电话了")
  conn, addr = server.accept() # 就是等待的意思
  #conn就是客户端连过来的时候,在服务器端为其生成的一个连接实例

  while True:
    data = conn.recv(1024).decode()
    print("电话来了%s" % type(data))
    # if type(data) is str:
    #   data = data.strip()
    if not data:
      print('client is lost.')
      break
    cmd_res = os.popen(data).read() #popen就是打开命令执行,read就是获取结果
    cmd_res_size = str(len(cmd_res.encode("utf-8")))
    print("before send",len(cmd_res),"size after encode", cmd_res_size)
    if len(cmd_res) == 0:
      print("there is no output.")
      res_warning = "there is no output."
      conn.send(res_warning.encode("utf-8"))
      continue
    else:
      conn.send(cmd_res_size.encode("utf8"))
      print(conn.recv(1024).decode()) #通过接收数据的形式来强制发送缓冲区的数据,防止粘包。
    # with open('filename', 'r') as ret: #这两行就 可以用过来传输文件了。
    #   data = ret.read()
    #print('receive:',data)
    print('receive:', data)
    conn.send(cmd_res.encode("utf-8"))
    # conn.send(bytes(cmd_res)) #不可行。传输的时候是需要encoding
server.close()

socket_client.py

#! /usr/bin/env python
# -*- coding:utf-8 -*-
# Author Ian Ying
# mail: kongqing.ying@yitu-inc.com

import socket


client = socket.socket() #声明socket类型,同时生成socket链接对象
client.connect(('localhost',6969))  #localhost就是本机地址

while True:
  msg = input('input msg >>:').strip()
  if len(msg) == 0: continue #检查msg的信息,防止无输入信息
  #client.send(b"Hello, world!") #发送信息
  client.send(msg.encode('utf-8'))
  received_size = client.recv(1024).decode() #用来记录接受的数据大小
  print("接收的数据大小", received_size)
  received_cont = b''
  received_cont_size = 0 # 用来判断接受数据的大小
  if received_size != "there is no output." :
    client.send("准备好了,可以发送。".encode()) #发送确认信息,以防止粘包
    received_size = int(received_size) #数据需要变成int才能进行判断
    while received_size != received_cont_size: #判断encode后的长度是否一致。
      received_cont_for_test = client.recv(1024)
      received_cont_size += int(len(received_cont_for_test))
      received_cont = received_cont + received_cont_for_test
      print("当前结束后的数据大小为:", received_cont_size)
      # print(received_cont_size)
    else:
      print("数据接收完成,接收的数据大小为:", received_cont_size)
      print("接收的内容为:\n",received_cont.decode(),"\n")
  else:
    print("output:\n", received_size)
    # data = client.recv(1024) #默认接受1024字节,就是1k
    # with open('filename', 'w') as ret: # 这两行就 可以用过来传输文件了。
    #   ret = data.write()
    # print(data.decode())
    # print(str(data))
client.close() #关闭端口

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用urlparse分析网址中域名的方法
Apr 15 Python
CentOS安装pillow报错的解决方法
Jan 27 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
Python实现读取txt文件并画三维图简单代码示例
Dec 09 Python
解决matplotlib库show()方法不显示图片的问题
May 24 Python
Python秒算24点实现及原理详解
Jul 29 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
Python for i in range ()用法详解
Sep 18 Python
python中rc1什么意思
Jun 19 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
matplotlib交互式数据光标mpldatacursor的实现
Feb 03 Python
基于python3 的百度图片下载器的实现代码
Nov 05 #Python
Python hashlib模块加密过程解析
Nov 05 #Python
python set集合使用方法解析
Nov 05 #Python
基于python2.7实现图形密码生成器的实例代码
Nov 05 #Python
python中删除某个元素的方法解析
Nov 05 #Python
Django 框架模型操作入门教程
Nov 05 #Python
Python3.7 读取 mp3 音频文件生成波形图效果
Nov 05 #Python
You might like
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
PHP管理依赖(dependency)关系工具 Composer的自动加载(autoload)
2014/08/18 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
PHP使用mysql_fetch_row查询获得数据行列表的方法
2015/03/18 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
2019/06/14 PHP
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
JS简单生成两个数字之间随机数的方法
2016/08/03 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
微信小程序实战之自定义抽屉菜单(7)
2017/04/18 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
jQuery实现合并表格单元格中相同行操作示例
2019/01/28 jQuery
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
Python 专题二 条件语句和循环语句的基础知识
2017/03/19 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
python绘制直方图和密度图的实例
2019/07/08 Python
python列表生成器迭代器实例解析
2019/12/19 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Python descriptor(描述符)的实现
2020/11/15 Python
python之随机数函数的实现示例
2020/12/30 Python
英国最受欢迎的价格比较网站之一:MoneySuperMarket
2018/12/19 全球购物
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
火山动力Java笔试题
2014/06/26 面试题
2014年五一活动策划方案
2014/03/15 职场文书
实习公司领导推荐函
2014/05/21 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
介绍信范文
2015/01/31 职场文书
工会积极分子个人总结
2015/03/03 职场文书
早会开场白台词大全
2015/06/01 职场文书
会议室管理制度范本
2015/08/06 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
自考生自我评价
2019/06/21 职场文书
Python中可变和不可变对象的深入讲解
2021/08/02 Python
SpringBoot项目部署到阿里云服务器的实现步骤
2022/06/28 Java/Android