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协议 ...
随机推荐
- Java常用数据结构Set, Map, List
1. Set Set相对于List.Map是最简单的一种集合.集合中的对象不按特定的方式排序,并且没有重复对象. 特点: 它不允许出现重复元素: 不保证和政集合中元素的顺序 允许包含值为null的元素 ...
- jquery动态修改带有important的样式方法
$('.el-card').css("background", "#fff !important");(不起作用的) 改为: $('.el-card').css ...
- selenium问题之定位不到元素(NoSuchElementException)
在使用selenium+爬虫的时候,经常会遇到一个问题,就是NoSuchElementException,定位不到元素的问题 一,打开了新页面,一般selenium点击新链接跳转打开了一个新页面,那么 ...
- R 数据分析
目录: windows命令行中执行R dataframe 常用函数.变量 1.windows命令行中执行R 前提:已经把R的命令目录加入了系统路径中. 在windows中,命令行执行R可以用以下两种方 ...
- jenkins配置到gitlab拉代码
参照: jenkins 从git拉取代码-简明扼要 https://www.cnblogs.com/jwentest/p/7065783.html 持续集成①安装部署jenkins从git获取代码-超 ...
- iText例子
参考:http://itextpdf.com/book/examples.php daniel@daniel-mint ~/latex/linux/itext/daniel $ cat HelloWo ...
- Advanved DataGrid using QTP
Use the GetCellData(j,i) Function for Cell data and Use the GetRowData(j) Function for Row Data wher ...
- “希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔
“希希敬敬对”队软件工程第九次作业-beta冲刺第五次随笔 队名: “希希敬敬对” 龙江腾(队长) 201810775001 杨希 201810812008 何敬 ...
- jvm学习(1) 总体篇
1.1 Java体系构成 JAVA体系包括四个方面: JAVA编程语言,编辑的文件为Java源代码,文件格式为(.java): JAVA类文件格式,编译后文件格式为(.class): JA ...
- 配置访问公网主机上的jupyter notebook
文章结构: 一.安装python 二.安装并配置jupyter并配置jupyter 三.第一个python程序 一.安装python 1.1下载python安装包 # wget https://www ...