一.粘包现象原理分析 1.我们先来看几行代码,从现象来分析: 测试程序分为两部分,分别是服务端和客户端 服务端.py #!/usr/bin/env python3 #-*- coding:utf-8 -*- # write by congcong import socket server = socket.socket(family=socket.AF_INET,type=socket.SOCK_STREAM) server.bind(('127.0.0.1',3306)) server.lis…
粘包现象: 如上篇博客中最后的示例,客户端有个 phone.recv(2014) , 当服务端发送给客户端的数据大于1024个字节时, 多于1024的数据就会残留在管道中,下次客户端再给服务端发命令时,残留在管道的数据会先发送给客户端,新命令产生的数据会排在上次命令残留数据的后面发送到客户端,即两次结果的数据粘在一起了, 这个就是粘包现象. 粘包现象的原理分析: # 运行一个软件或程序需要的硬件:CPU.内存.硬盘 # CPU负责执行:CPU执行需要数据,而数据从内存中取,最后可以把数据存到硬盘…
socket通信 1.简单的套接字通信 import socket phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM) phone.bind(('127.0.0.1',8080)) phone.listen(5) print('starting...') conn,client_addr = phone.accept() data = conn.recv(1024) conn.send(data.upper()) conn.close…
计算机网络的发展及基础网络概念 问题:网络到底是什么?计算机之间是如何通信的? 早期 : 联机 以太网 : 局域网与交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉.有线电视网就是典型的广播型网络,我们的电视机实际上是接受到所有频道的信号,但只将一个频道的信号还原成画面.在数据网络中也允许广播的存在,但其被限制在二层交换机的局域网范围内,禁止广播数据穿过…
tcp:属于长连接,与一个客户端进行连接了以后,其他的客户端要等待,要连接另外一个,必须优雅的断开前面这个客户端的连接. 允许地址重用:在bind IP地址和端口之前加上,# server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) # 允许(IP地址和端口)地址重用 缓冲区 输入缓冲区 #recv 输出缓冲区 #send 粘包(tcp的两种粘包现象) 1 连续发送小的数据,并且每次发送之间的时间间隔很短(输出缓冲区:两个消息在缓冲区黏…
import   socket 1.通信套接字(1人1句)服务端和1个客户端 2.通信循环(1人多句)服务端和1个客户端 3.通信循环(多人(串行)多句)多个客户端(服务端服务死:1个客户端--->下一个客户端...) 基于上面的基础:实现远程执行命令 发现问题:send(cmd) recv() send(命令结果) recv(1024)命令结果没收完 粘包问题: 主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的. 解决   自定义报头固定长度 import str…
为什么TCP 会粘包 前几天,调试mina的TCP通信, 第一个协议包解析正常,第二个数据包不完整.为什么会这样吗,我们用mina这样通信框架,还会出现这种问题? TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务.收发两端(客户端和服务器端)都要有一一成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包.这…
网络开发的框架 C/S B/S 架构 程序都是bs架构的程序(b指浏览器,s指服务器) c(client)是客户端,s(server)是服务器 bs架构是cs架构的一种 未来的趋势, pc端bs架构,统一了程序的入口 手机端 微信公众号,统一了程序的入口 socket 起一个tcp协议的socket进行通信 # tcp协议 #客户端 # import socket # rev = socket.socket() # # rev.bind(("ip地址",端口号)) #端口号一般取800…
InetAddress 类 JDK中为开发网络应用程序提供了java.net包,该包下的类和接口差点儿都是为网络编程服务的. InetAddress:用于描写叙述IP地址的对象 InetAddress类没有提供构造方法, 而是提供了静态方法来获取InetAddress实例 getByName(String host):依据主机获取相应的InetAddress对象. getByAddress(byte[] addr):依据原始IP地址来获取相应的InetAddress对象. getAllByNam…
IP协议 网络地址和主机协议 位于网络层的协议,主要目的是使得网络能够互相通信,该协议使用逻辑地址跨网络通信,目前有两个版本IPV4,IPV6. 在IPV4协议中IP地址是一个32位的数备,采用点分四组的表示法便于使用.每个IP地址包含两个部分,网络地址和主机地址. 网络地址和主机地址的划分由子网掩码来决定.网络地址用来标示所连接到的局域网,主机地址则标示设备本身,子网掩码与IP地址等长,被设为1的部分标示IP地址的对应部分为网络地址,设为0则标示IP对应位为主机地址. IP格式 0-3 版本:…