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进程管理工具supervisor使用实例
Sep 17 Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
Python使用ftplib实现简易FTP客户端的方法
Jun 03 Python
python+opencv实现动态物体识别
Jan 09 Python
详解python中Numpy的属性与创建矩阵
Sep 10 Python
python执行精确的小数计算方法
Jan 21 Python
Tensorflow模型实现预测或识别单张图片
Jul 19 Python
python检测服务器端口代码实例
Aug 31 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
Feb 29 Python
Python实现上下文管理器的方法
Aug 07 Python
python 模拟在天空中放风筝的示例代码
Apr 21 Python
pyqt5打包成exe可执行文件的方法
May 14 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最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
PHP后台微信支付和支付宝支付开发
2017/04/28 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
jquery UI 1.72 之datepicker
2009/12/29 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
Javascript基础教程之if条件语句
2015/01/18 Javascript
js比较日期大小的方法
2015/05/12 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
2种简单的js倒计时方式
2017/10/20 Javascript
基于Vue2.0+ElementUI实现表格翻页功能
2017/10/23 Javascript
Vue+Vux项目实践完整代码
2017/11/30 Javascript
vue.js表单验证插件(vee-validate)的使用教程详解
2019/05/23 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
详解js中的原型,原型对象,原型链
2020/07/16 Javascript
处理JavaScript值为undefined的7个小技巧
2020/07/28 Javascript
python虚拟环境virualenv的安装与使用
2016/12/18 Python
Python聊天室程序(基础版)
2018/04/01 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python OpenCV对本地视频文件进行分帧保存的实例
2019/01/08 Python
Python实现合并两个有序链表的方法示例
2019/01/31 Python
Python 合并多个TXT文件并统计词频的实现
2019/08/23 Python
Python算法中的时间复杂度问题
2019/11/19 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
如何验证python安装成功
2020/07/06 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
复古斯堪的纳维亚儿童服装:Baby go Retro
2017/09/09 全球购物
JustFab加拿大:女鞋、靴子、手袋和服装在线
2018/05/18 全球购物
教师专业理论水平的自我评价分享
2013/11/09 职场文书
优秀体育委员自荐书
2014/01/31 职场文书
战友聚会主持词
2014/04/02 职场文书
图书馆志愿者活动总结
2014/06/27 职场文书
争做文明公民倡议书
2014/08/29 职场文书
大学生社会实践感想
2015/08/11 职场文书
初中生物教学随笔
2015/08/15 职场文书