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 bsddb模块操作Berkeley DB数据库介绍
Apr 08 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
Python实现变量数值交换及判断数组是否含有某个元素的方法
Sep 18 Python
Python操作MySQL模拟银行转账
Mar 12 Python
python中format()函数的简单使用教程
Mar 14 Python
pandas读取csv文件,分隔符参数sep的实例
Dec 12 Python
python内存管理机制原理详解
Aug 12 Python
详解python中的模块及包导入
Aug 30 Python
TensorFlow 多元函数的极值实例
Feb 10 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
如何用Python 实现全连接神经网络(Multi-layer Perceptron)
Oct 15 Python
搭建pypi私有仓库实现过程详解
Nov 25 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入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
JS 显示当前日期与时间的代码
2010/03/24 Javascript
理解Javascript_11_constructor实现原理
2010/10/18 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
详解VUE的状态控制与延时加载刷新
2017/03/27 Javascript
基于node.js之调试器详解
2017/08/22 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
python基础教程之popen函数操作其它程序的输入和输出示例
2014/02/10 Python
Python正则获取、过滤或者替换HTML标签的方法
2016/01/28 Python
简单易懂的python环境安装教程
2017/07/13 Python
Django框架模板的使用方法示例
2019/05/25 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
Django自带的用户验证系统实现
2020/12/18 Python
python的scipy.stats模块中正态分布常用函数总结
2021/02/19 Python
巴西最好的男鞋:Rafarillo
2018/05/25 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
法国亚马逊官方网站:Amazon.fr
2020/12/19 全球购物
聚网科技C++面试笔试题
2015/09/01 面试题
司马光教学反思
2014/02/01 职场文书
机关出纳岗位职责
2014/04/03 职场文书
师范大学生求职信
2014/06/13 职场文书
学校消防安全责任书
2014/07/23 职场文书
2014领导干部四风问题查摆思想汇报
2014/09/13 职场文书
世界环境日活动总结
2015/02/11 职场文书
教育教学工作反思
2016/02/24 职场文书
Python上下文管理器Content Manager
2021/06/26 Python
基于Python实现对比Exce的工具
2022/04/07 Python