python 网络编程:socket(二)
上节地址:Python网络编程:socket
一、send和sendall区别
二、粘包
#!/usr/bin/env python
# _*_ coding:utf_8 _*_
import socket
ip_port=('127.0.0.1',9002)
s = socket.socket()
s.connect(ip_port)
while True:
send_data = input('>>: ').strip()
if len(send_data) == 0:continue
if send_data == 'exit':break
s.send(bytes(send_data,encoding='utf-8'))
#解决粘包问题
ready_tag = s.recv(1024) #收取待发送字节的长度
ready_tag=str(ready_tag,encoding='utf8')
if ready_tag.startswith('Ready'): #数据包格式为Ready|9124
msg_size=int(ready_tag.split('|')[-1])
start_tag = 'Start'
s.sendall(bytes(start_tag,encoding='utf8')) #发送消息,表示开始传输
recv_size = 0
#print(msg_size)
recv_msg = b''
while recv_size < msg_size:
recv_data = s.recv(1024)
recv_msg+=recv_data
recv_size+=len(recv_data)
print(str(recv_msg,encoding='utf8'))
#收消息
# recv_data=s.recv(1024)
# print(str(recv_data,encoding='utf-8')) s.close()
socket_client
#!/use/bin/env python
#_*_ coding:utf_8 _*_
import socket
import subprocess
ip_addr=('127.0.0.1',9002)
s=socket.socket() #创建对象
s.bind(ip_addr) #绑定连接地址
s.listen(5) #设置监听主机数
while True:
conn,addr=s.accept()
i = 0
while True:
print(i)
try:
recv_data = conn.recv(1024)
print('------0')
#print(str(recv_data,encoding='utf-8'))
if len(recv_data) == 0:break
#执行系统命令
p=subprocess.Popen(str(recv_data,encoding='utf-8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)#执行系统命令,windows平台命令的标准输出是gbk编码,需要转换
res = p.stdout.read() #获取标准输出
if len(res) == 0: #执行错误命令,send_data为空
send_data = str(p.stderr.read(),encoding='utf-8')
else:
send_data=str(res,encoding='gbk')
send_data=bytes(send_data,encoding='utf-8') #要发送的数据 #判断粘包
ready_tag='Ready|%s' %len(send_data)
conn.send(bytes(ready_tag,encoding='utf8')) #发送数据长度
feedback=conn.recv(1024) #接收确认信息
feedback=str(feedback,encoding='utf8')
if feedback.startswith('Start'):
print(send_data)
conn.sendall(send_data) #发送命令的执行结果
#conn.sendall(send_data)
print('succeed')
i+=1 except Exception:
break
conn.close()
socket cmd
python 网络编程:socket(二)的更多相关文章
- Python网络编程—socket(二)
http://www.cnblogs.com/phennry/p/5645369.html 接着上篇博客我们继续介绍socket网络编程,今天主要介绍的内容:IO多路复用.多线程.补充知识点. 一.I ...
- Python 网络编程(二)
Python 网络编程 上一篇博客介绍了socket的基本概念以及实现了简单的TCP和UDP的客户端.服务器程序,本篇博客主要对socket编程进行更深入的讲解 一.简化版ssh实现 这是一个极其简单 ...
- Python网络编程socket
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- Day07 - Python 网络编程 Socket
1. Python 网络编程 Python 提供了两个级别访问网络服务: 低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口 ...
- python网络编程-socket编程
一.服务端和客户端 BS架构 (腾讯通软件:server+client) CS架构 (web网站) C/S架构与socket的关系: 我们学习socket就是为了完成C/S架构的开发 二.OSI七层 ...
- python网络编程socket /socketserver
提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...
- python --- 网络编程Socket
网络编程 定义:所为网络编程即是对信息的发送和接收. 主要工作: (1)发送端:将信息以规定的协议组装成数据包. (2)接收端:对收到的数据包解析,以提取所需要的信息. Socket:两个在网络上的程 ...
- 第十三章:Python の 网络编程进阶(二)
本課主題 SQLAlchemy - Core SQLAlchemy - ORM Paramiko 介紹和操作 上下文操作应用 初探堡垒机 SQLAlchemy - Core 连接 URL 通过 cre ...
- Day10 Python网络编程 Socket编程
一.客户端/服务器架构 1.C/S架构,包括: 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务)[QQ,SSH,MySQL,FTP] 2.C/S架构与socket的关系: 我们学习soc ...
- python网络编程——socket基础篇
python的网络编程比c语言简单许多, 封装许多底层的实现细节, 方便程序员使用的同时, 也使程序员比较难了解一些底层的东西. 1 TCP/IP 要想理解socket,首先得熟悉一下TCP/IP协议 ...
随机推荐
- HashMap存取原理之JDK8
前言 哈希表(hash table)也叫散列表,是一种非常重要的数据结构 应用场景之一:缓存技术(比如memcached的核心其实就是在内存中维护一张大的哈希表) 目录 一.哈希表 二.hashmap ...
- Python笔记(八)_内部函数与闭包
内部函数 在函数内部定义另一个函数,也就是函数的嵌套 在外部函数的作用域内,外部函数可以随意调用内部函数 由于内部函数的整个定义过程都在外部函数中,所以出了外部函数就无法再被调用了 def outsi ...
- 简单DP入门(二) 最长上升子序列及其优化
最长上升子序列解决问题: 有N个数,求出它最长的上升子序列并输出长度. 在题里不会讲的这么直白,这个算法往往会与其他的算法混在一起使用. 在这篇文章中不会出现其他的例题,为了让大家更好的理解,我只会对 ...
- C++中的面向对象(二)
1,类之间的基本关系: 1,继承: 1,从已存在类细分出来的类和原类之间具有继承关系(is-a): 1,子类就是一个(is-a)父类: 2,继承是单向的: 2,继承的类(子类)拥有原类(父类)的所有属 ...
- APACHE两种域名跳转法简单完成重定向
当我们变更网站域名,或者申请多个域名指向一个网站的时候,这个时候我们就会用到域名跳转(或者叫域名重定向redirect.域名转向).下面用最简单的文字讲两种apache的域名跳转方法. 假设我们想把w ...
- min-element & max_element
C++ STL之min_element()与max_element()(取容器中的最大最小值) min_element()和max_element 头文件:#include<algorithm& ...
- 【目录】mysql 架构篇系列
随笔分类 - mysql 架构篇系列 mysql 架构篇系列 4 复制架构一主一从搭建(半同步复制) 摘要: 一.概述 在mysql 5.5之前,mysql 的复制是异步操作,主库和从库的数据之间存在 ...
- element checkbox 勾选时出现弹框提示。
复选框选中的时候,必须提示是否确定选中,取消勾选的时候也要. 不能解决的思路: 1.element的checkbox只有一个change事件,该事件只返回该选项最新的值(true,false)(不会返 ...
- JavaScript寻找最长的单词算法
返回提供的句子中最长的单词的长度. 返回值应该是一个数字. 第一步,使用String.prototype.split()方法将字符串转换成数组 function findLongestWord(str ...
- 2019牛客多校第七场H Pair 数位DP
题意:给你一个3个数A, B, C问有多少对pair(i, j),1 <= i <= A, 1 <= j <= B, i AND j > C或 i XOR j < ...