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抓取Discuz!用户名脚本代码
Dec 30 Python
python处理cookie详解
Feb 07 Python
TensorFlow实现Batch Normalization
Mar 08 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
获取python的list中含有重复值的index方法
Jun 27 Python
基于随机梯度下降的矩阵分解推荐算法(python)
Aug 31 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 Python
pygame实现贪吃蛇游戏(下)
Oct 29 Python
python scatter函数用法实例详解
Feb 11 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
Python Scrapy多页数据爬取实现过程解析
Jun 12 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修改记录的方法
2015/01/21 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
在JS数组特定索引处指定位置插入元素
2014/07/27 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
JavaScript生成二维码图片小结
2015/12/27 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
vue快捷键与基础指令详解
2017/06/01 Javascript
Vue在页面右上角实现可悬浮/隐藏的系统菜单
2018/05/04 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
返回上一个url并刷新界面的js代码
2020/09/12 Javascript
Python遍历zip文件输出名称时出现乱码问题的解决方法
2015/04/08 Python
浅谈Python的垃圾回收机制
2016/12/17 Python
Python中enumerate()函数编写更Pythonic的循环
2018/03/06 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
2018/05/24 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
Pytorch 实现权重初始化
2019/12/31 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
python读取excel数据绘制简单曲线图的完整步骤记录
2020/10/30 Python
英国办公用品商店:Office Outlet
2018/04/04 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
成教自我鉴定
2013/10/27 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
新年爱情寄语
2014/04/08 职场文书
2014年党的群众路线教育实践活动总结
2014/04/25 职场文书
考试作弊检讨书怎么写?
2014/12/21 职场文书
关于迟到的检讨书
2015/05/06 职场文书
庆祝教师节主题班会
2015/08/17 职场文书