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中通过threading模块定义和调用线程的方法
Jul 12 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
python简易远程控制单线程版
Jun 20 Python
Python中@property的理解和使用示例
Jun 11 Python
Python pandas DataFrame操作的实现代码
Jun 21 Python
Python Gitlab Api 使用方法
Aug 28 Python
python多线程案例之多任务copy文件完整实例
Oct 29 Python
设置jupyter中DataFrame的显示限制方式
Apr 12 Python
Python3基于plotly模块保存图片表格
Aug 03 Python
详解python polyscope库的安装和例程
Nov 13 Python
详解如何使用Pytest进行自动化测试
Jan 14 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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实现mysql同步的实现方法
2009/10/21 PHP
一步一步学习PHP(4) php 函数 补充2
2010/02/15 PHP
PHP基础学习小结
2011/04/17 PHP
通过修改配置真正解决php文件上传大小限制问题(nginx+php)
2015/09/23 PHP
详解WordPress中提醒安装插件以及隐藏插件的功能实现
2015/12/25 PHP
Laravel获取所有的数据库表及结构的方法
2019/10/10 PHP
this和执行上下文实现代码
2010/07/01 Javascript
JavaScript设置表单上传时文件个数的方法
2015/08/11 Javascript
Three.js中网格对象MESH的属性与方法详解
2017/09/27 Javascript
jQuery+datatables插件实现ajax加载数据与增删改查功能示例
2018/04/17 jQuery
.vue文件 加scoped 样式不起作用的解决方法
2018/05/28 Javascript
小程序封装路由文件和路由方法(5种全解析)
2019/05/26 Javascript
js实现简单页面全屏
2019/09/17 Javascript
浅谈Node新版本13.2.0正式支持ES Modules特性
2019/11/25 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
使用Python脚本对Linux服务器进行监控的教程
2015/04/02 Python
python中Switch/Case实现的示例代码
2017/11/09 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
python交换两个变量的值方法
2019/01/12 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
基于Python执行dos命令并获取输出的结果
2019/12/30 Python
python如何实现图片压缩
2020/09/11 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
详解CSS3 filter:drop-shadow滤镜与box-shadow区别与应用
2020/08/24 HTML / CSS
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
护理专业自荐信
2013/12/03 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
工程索赔意向书
2014/08/30 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
习总书记三严三实学习心得体会
2014/10/13 职场文书
出差报告怎么写
2014/11/06 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书
教你用Python爬取英雄联盟皮肤原画
2021/06/13 Python
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL