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协议 ...
随机推荐
- window安装oracle和创建数据库
原文地址: https://www.cnblogs.com/hoobey/p/6010804.html #11g安装 https://www.cnblogs.com/qq1272850043/p/6 ...
- [CSP-S模拟测试]:公园(BFS+剪枝)
题目传送门(内部题31) 输入格式 第一行,五个整数$V,M,N,E,L$.接下来$M$行,每行两个正整数$s_i,a_i$.保证$s_i$互不相等.接下来$N$行,每行两个正整数$t_j,b_j$. ...
- 题解 P1033 【自由落体】
太坑人了 这不是明摆着坑那些没有学完初中物理的同学们 QAQ 首先这个题其实就是转换一下参照系. 由原先小车向小球靠拢换成小车静止,小球向着小车靠拢(原点设置成车右下角那个点). 然后就成了平抛运动. ...
- spring boot 尚桂谷学习笔记08 Docker ---Web
------Docker------ 简介:Docker是一个开元的应用容器引擎,性能非常高 已经安装好的软件打包成一个镜像放到服务器中运行镜像 MySQL容器,Redis容器...... Docke ...
- c#拆分字符串英文和数字(包括国外所以文字)
先创建一个类: /// <summary> /// 字符串分析 /// </summary> interface IStringAna { /// <summary> ...
- Learning OSG programing---osgScribe
Learning OSG programing---osgScribe Scribe可以翻译为素描,抄写等.本例通过在模型表面添加一层素描,来显示模型的骨架. 关键代码: osg::ref_ptr&l ...
- [CF1202B] You Are Given a Decimal String(最短路)
Description 今天突然想来发一篇博客防死 [Portal][https://vjudge.net/problem/2650668/origin] 定义被x-y生成器生成的序列为, 一开始有一 ...
- str方法
'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', ' ...
- SQL语句优化方式--进阶篇
MYSQL性能 最大数据量 抛开数据量和并发数,谈性能都是扯淡(扯的最疼的那种).Mysql没有限制单表最大记录数,它取决与操作系统对文件大小的限制 文件系统 单文件大小限制 FAT32(采用32位二 ...
- Javascript基础四(数组,字符,对象,日期)
第一节:数组 1.数组的概念及定义 可以存放一组数据: 当需要操作多个数据时: 2.数组的创建方式 var arr1 = [1,2,3]; //字面量方式 var arr2 ...