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计算圆周率pi的方法
Jul 11 Python
简单谈谈Python中的反转字符串问题
Oct 24 Python
详解Python之unittest单元测试代码
Jan 24 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
python查看模块,对象的函数方法
Oct 16 Python
详解Python连接MySQL数据库的多种方式
Apr 16 Python
用OpenCV将视频分解成单帧图片,图片合成视频示例
Dec 10 Python
你应该知道的Python3.6、3.7、3.8新特性小结
May 12 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
pytorch简介
Nov 11 Python
Python如何telnet到网络设备
Feb 18 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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版 汉字转码的实现详解
2013/06/09 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
PHP实现抓取Google IP并自动修改hosts文件
2015/02/12 PHP
PHP 中 DOMDocument保存xml时中文出现乱码问题的解决方案
2016/09/19 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
关于ExtJS4.1:快捷键支持的问题
2013/04/24 Javascript
jquery 插件实现瀑布流图片展示实例
2015/04/03 Javascript
jquery实现网页的页面平滑滚动效果代码
2015/11/02 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
jquery mobile 移动web(5)
2015/12/20 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
jquery自定义插件开发之window的实现过程
2016/05/06 Javascript
bootstrap轮播图示例代码分享
2017/05/17 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
nuxt中使用路由守卫的方法步骤
2019/01/27 Javascript
用python写的一个wordpress的采集程序
2016/02/27 Python
Python爬取京东的商品分类与链接
2016/08/26 Python
人脸识别经典算法一 特征脸方法(Eigenface)
2018/03/13 Python
详解Python对JSON中的特殊类型进行Encoder
2019/07/15 Python
python实现在线翻译功能
2020/03/03 Python
Python dict的常用方法示例代码
2020/06/23 Python
HTML5中使用postMessage实现两个网页间传递数据
2016/06/22 HTML / CSS
多媒体编辑专业毕业生推荐信
2013/11/05 职场文书
会计系个人求职信范文分享
2013/12/20 职场文书
《童年》教学反思
2014/02/18 职场文书
六一亲子活动总结
2014/07/01 职场文书
党员自我剖析材料范文
2014/10/06 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
死亡赔偿协议书
2015/01/28 职场文书
中小企业员工手册范本
2015/05/14 职场文书
六五普法先进个人主要事迹材料
2015/11/03 职场文书
创业计划书之零食店(进口)
2019/09/24 职场文书
GO语言异常处理分析 err接口及defer延迟
2022/04/14 Golang
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
2022/04/20 Python