python 网络编程--socket模块/struct模块
socket模块:
客户端:CS架构, client -> server
浏览器:BS架构, browser -> server
网络通信本质:传输字节
doc命令查看ip地址:ipconfig / ifconfig(windows系统 / mac系统)
tcp协议和udp协议
TCP(Transmission Conteol Protocol)可靠的,面向连接的协议(eg打电话),传输效率低全双工通信(发送缓存&接收缓存),面向字节流.使用TCP的应用:Web浏览器;电子邮件,文件传输程序.
UDP(User Datagram Protocol)不可靠的,无连接的服务,传输效率高(发送前延时小),一对一,一对多,多对一,多对多,面向报文,尽最大努力服务,无拥塞控制.使用UDP的应用:域名系统(DNS);视频流;IP语音(VoIP).
服务端:
import socket
# 创建服务端socket对象
server = socket.socket() # 绑定IP和端口
server.bind(('192.168.13.88',5001)) # 后边可以等5个人
server.listen(5) while 1:
conn,addr = server.accept() # 等待客户端来连接,如果没人来就傻傻的等待。
#字节类型
while 1:
data = conn.recv(1024) # 一次性最多拿1024字节。
if data == b"exit":
break
response = data + b'在北京'
conn.send(response) # 服务端通过连接对象给客户端回复了一个消息。
conn.close() # 与客户端断开连接
客户端:
import socket
# 创建服务端socket对象
sk = socket.socket()
# 绑定IP和端口
sk.connect(('192.168.13.88',5001)) while 1:
name = input('请输入姓名:')
sk.send(name.encode('utf-8')) # 链接上服务端后,向服务端发送消息
if name == 'exit':
break response = sk.recv(1024) # 等待服务端给他发送消息
print(response.decode('utf-8')) sk.close() # 关闭自己
黏包:
同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到了之前执行的另外一部分结果,这种显现就是黏包.
#_*_coding:utf-8_*_
from socket import *
import subprocess ip_port=('127.0.0.1',8888)
BUFSIZE=1024 tcp_socket_server=socket(AF_INET,SOCK_STREAM)
tcp_socket_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
tcp_socket_server.bind(ip_port)
tcp_socket_server.listen(5) while True:
conn,addr=tcp_socket_server.accept()
print('客户端',addr) while True:
cmd=conn.recv(BUFSIZE)
if len(cmd) == 0:break res=subprocess.Popen(cmd.decode('utf-8'),shell=True,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE) stderr=res.stderr.read()
stdout=res.stdout.read()
conn.send(stderr)
conn.send(stdout) tcp - server
黏包实例:TCP/服务端
#_*_coding:utf-8_*_
import socket
BUFSIZE=1024
ip_port=('127.0.0.1',8888) s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
res=s.connect_ex(ip_port) while True:
msg=input('>>: ').strip()
if len(msg) == 0:continue
if msg == 'quit':break s.send(msg.encode('utf-8'))
act_res=s.recv(BUFSIZE) print(act_res.decode('utf-8'),end='') tcp - client
黏包实例:TCP/客户端
tcp协议的拆包机制
成因:当发送端缓冲区的长度大于网卡的MTU时,tcp会将这次发送的数据拆成几个数据包发出去.MTU是Maximum Transmission Unit的缩写.意思是网络上传的最大数据包.MTU的单位是字节.大部分网络设备的MTU都是1500.如果本季的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度.
struct模块:
该模块可以把一个类型,例如数字,转换成固定长度的bytes
struct.pack('i',1111111111111) struct.error: 'i' format requires -2147483648 <= number <= 2147483647 #这个是范围
python 网络编程--socket模块/struct模块的更多相关文章
- 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
网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...
- python网络编程-socket套接字通信循环-粘包问题-struct模块-02
前置知识 不同计算机程序之间数据的传输 应用程序中的数据都是从程序所在计算机内存中读取的. 内存中的数据是从硬盘读取或者网络传输过来的 不同计算机程序数据传输需要经过七层协议物理连接介质才能到达目标程 ...
- python网络编程——SocketServer/Twisted/paramiko模块
在之前博客C/S架构的网络编程中,IO多路复用是将多个IO操作复用到1个服务端进程中进行处理,即无论有多少个客户端进行连接请求,服务端始终只有1个进程对客户端进行响应,这样的好处是节省了系统开销(se ...
- 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协议 ...
- Python 网络编程——socket
一 客户端/服务器架构 客户端(Client)服务器(Server)架构,即C/S架构,包括 1.硬件C/S架构(打印机) 2.软件C/S架构(web服务) 理想/目标状态—— 最常用的软件服务器是 ...
- python网络编程socket /socketserver
提起网络编程,不同于web编程,它主要是C/S架构,也就是服务器.客户端结构的.对于初学者而言,最需要理解的不是网络的概念,而是python对于网络编程都提供了些什么模块和功能.不同于计算机发展的初级 ...
随机推荐
- C++复习8.异常处理和RTTI
C++异常处理和RTTI技术 20130930 1.异常处理的基本知识 C语言中是没有内置运行时错误处理机制,对于错误发生的时候使用的几种处理机制: 函数返回彼此协商后统一定义的状态编码来表示操作成功 ...
- C#常用函数与方法集合
1.DateTime 数字型 System.DateTime currentTime=new System.DateTime(); 1.1 取当前年月日时分秒 ...
- ElementUI组件Cascader级联选择器数据后台处理
Cascader级联选择器数据数据格式不知道的可以去官网看下:这里我就不表示什么了. 部门实体类: import lombok.Data; @Data public class Department ...
- trigger 触发器(mysql)
/* 触发器 tigger 引出触发器: 在进行数据库应用软件的开发的时候,我们有时候会碰到表中的某些数据改变,同事希望引起其他相关数据改变的需求,这时候就需要使用触发器. 运用触发器可以简化程序,增 ...
- Docker搭建独立服务器
用Docker尝试搭建了一个Apache2服务器,整体安装很简单,但是从容器中退出后,Apache2服务器也就随之停止,网上有很多说可以通过docker run 加上-d参数可以使得服务器跑在后台,但 ...
- .net 枚举(Enum)使用总结
在实际问题中,有些变量的取值被限定在一个有限的范围内.例如,一个星期内只有七天,一年只有十二个月,性别只有男跟女等等.如果把这些量说明为整型.字符型或其它类型显然是不妥当的.为此,C#提供了一种称为“ ...
- (转)MapReduce Design Patterns(chapter 7 (part 2))(十四)
External Source Input Pattern Description 这种模式不从hdfs加载数据,而是从hadoop以外系统,例如RDB或web service加载. Intent 想 ...
- Http权威指南(cookie以及web认证机制)
其实对于cookie,想必大家都不陌生,cookie目前主要用于客户端的识别技术. 说到客户端识别技术,就不得不说一个登录态的问题了.登录态顾名思义,用于验证用户的登录与否. 1.登录态 对于PC端网 ...
- caffe 卷积层的运算
贾清扬寻找快速算法之路:https://github.com/Yangqing/caffe/wiki/Convolution-in-Caffe:-a-memo 卷积运算图文并茂:http://www. ...
- postgres访问外网控制
1. sudo apt-get install postgresql #安装psql 2. su passwd postgres #设置postgres账户的密码 3. postgresql.conf ...