网络编程

网络编程基础概念

耗尽温柔 提交于 2020-02-09 03:30:38
软件开发的架构 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用 第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用 这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~ C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。 B/S架构 B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。 Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 计算机网络的发展及基础概念 问题:网络到底是什么?计算机之间是如何通信的? 早期:联机 以太网局域网交换机 广播 主机之间“一对所有”的通讯模式,网络对其中每一台主机发出的信号都进行无条件复制并转发,所有主机都可以接收到所有信息(不管你是否需要),由于其不用路径选择,所以其网络成本可以很低廉

Linux网络编程 - TIME_WAIT

情到浓时终转凉″ 提交于 2020-02-08 23:31:35
1. TIME_WAIT 发生场景 让我们先从一例线上故障说起。在一次升级线上应用服务之后,我们发现该服务的可用性变得时好时坏,一段时间可以对外提供服务,一段时间突然又不可以,大家都百思不得其解。运维同学登录到服务所在的主机上,使用 netstat 命令查看后才发现,主机上有成千上万处于 TIME_WAIT 状态的连接。 为什么呢?我们这个应用服务需要通过发起 TCP 连接对外提供服务。每个连接会占用一个本地端口,当在高并发的情况下,TIME_WAIT 状态的连接过多,多到把本机可用的端口耗尽,应用服务对外表现的症状,就是不能正常工作了。当过了一段时间之后,处于 TIME_WAIT 的连接被系统回收并关闭后,释放出本地端口可供使用,应用服务对外表现为,可以正常工作。这样周而复始,便会出现了一会儿不可以,过一两分钟又可以正常工作的现象。 TIME_WAIT 是怎么产生的?首先从四次挥手说起,下面先展示一张图: TCP 连接终止时,主机 1 先发送 FIN 报文,主机 2 进入 CLOSE_WAIT 状态,并发送一个 ACK 应答,同时,主机 2 通过 read 调用获得 EOF,并将此结果通知应用程序进行主动关闭操作,发送 FIN 报文。主机 1 在接收到 FIN 报文后发送 ACK 应答,此时主机 1 进入 TIME_WAIT 状态。过了这个时间之后,主机 1 就进入 CLOSED

网络编程(三)

拈花ヽ惹草 提交于 2020-02-08 19:06:56
HTTP HTTP协议 Content-Type指示响应的内容,浏览器依靠其判断响应的内容是网页还是图片。 HTTP使用URI来传输数据和建立连接。 URI是统一资源标识符,URL是统一资源定位符,URI分为URL和URN,统一资源名称。 URL 一个完整的URL包括以下几个部分 http://www.enjoyedu.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name 协议部分:该URL的协议部分是http: 域名部分:该URL的域名为:www.enjoyedu.com。一个URL中,也可以使用IP地址作为域名使用 。 端口部分:跟着域名后的是端口,如果省略,使用默认端口。 虚拟目录,第一个/开始到最后一个/为止。 文件名部分,从最后一个/到?为止。本域名为index.asp 锚部分:从#到最后,本域名为name 参数部分,从?到#之间的部分。 一次完整的http请求过程 进行DNS域名解析(先从本地浏览器缓存,操作系统缓存或DNS服务器中查找) 建立TCP连接,三次握手 客户端向服务器发送请求命令 如:GET/sample/hello.jsp HTTP/1.1 客户端发送请求头信息 发送请求命令后,还需要以头信息的形式向服务器发送一些别的信息。之后客户端发送了一行空白行来通知服务器,已经结束了该头信息的发送。 服务器应答

网络编程

左心房为你撑大大i 提交于 2020-02-08 14:04:18
主要内容 软件架构CS/BS 网络通信三要素 TCP通信 Socket套接字 ServerSocket 学习目标 [ ] 能够辨别UDP和TCP协议特点 [ ] 能够说出TCP协议下两个常用类名称 [ ] 能够编写TCP协议下字符串数据传输程序 [ ] 能够理解TCP协议下文件上传案例 第一章 网络编程入门 1.1软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。 网络编程 ,就是在一定的协议下,实现两台计算机的通信的程序。 1.2 网络通信协议 网络通信协议: 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。 TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议

python--网络编程 01 socket常见方法总结

淺唱寂寞╮ 提交于 2020-02-08 13:48:34
服务端套接字函数 s.bind() 绑定(主机,端口号)到套接字 s.listen() 开始TCP监听 s.accept() 被动接受TCP客户的连接,(阻塞式)等待连接的到来 客户端套接字函数 s.connect() 主动初始化TCP服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛出异常 公共用途的套接字函数 s.recv() 接收TCP数据 s.send() 发送TCP数据 s.sendall() 发送TCP数据 s.recvfrom() 接收UDP数据 s.sendto() 发送UDP数据 s.getpeername() 连接到当前套接字的远端的地址 s.getsockname() 当前套接字的地址 s.getsockopt() 返回指定套接字的参数 s.setsockopt() 设置指定套接字的参数 s.close() 关闭套接字 面向锁的套接字方法 s.setblocking() 设置套接字的阻塞与非阻塞模式 s.settimeout() 设置阻塞套接字操作的超时时间 s.gettimeout() 得到阻塞套接字操作的超时时间 面向文件的套接字的函数 s.fileno() 套接字的文件描述符 s.makefile() 创建一个与该套接字相关的文件 send和sendall区别 来源: CSDN 作者: 一越王超 链接:

04python 黏包(python网络编程)

╄→尐↘猪︶ㄣ 提交于 2020-02-08 05:04:30
什么叫做黏包? 先写一个小补充: encode()函数、decode()函数: encode() 是将数据类型转换成bytes类型decode()是将bytes类型转换成其他类型encode() 叫做编码, decode( ) 叫做解码 通过一段代码来引出黏包现象(基于TCP的网络通信) sever端 import socket sk = socket.socket() sk.bind(('127.0.0.1', 8080)) sk.listen() conn, addr = sk.accept() while True: cmd = input('>>>') conn.send((cmd.encode('utf-8'))) # 将输入的数据转换层(utf-8)的bytes类型,用于网络传输 ret = conn.recv(1024).decode('utf-8') # 将接收到的数据(utf-8)的bytes类型数据,解码成本身的数据类型 print(ret) conn.close() sk.close() 19 1 import socket 2 3 4 sk = socket.socket() 5 sk.bind(('127.0.0.1', 8080)) 6 sk.listen() 7 8 conn, addr = sk.accept() 9 10 while True:

网络编程入门

故事扮演 提交于 2020-02-08 04:26:10
软件结构 C/S结构:全称为Client/Servers结构,是指客户端和服务结构。常见程序有QQ、迅雪等软件。 B/S结构:全称为 Browser/ Servers结构,是指浏览器和服务结构。常见浏览器有谷歌、火狐等。 两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程,就是在一定的协议下,实现两台计算机的通信的程序。 网络通信协议 网络通信协议 通过计算机网络可以使多台计算机实现连接,位于同一个网络中的计算机在进行连接和通信时需要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议,它对数据的传输格式、传输速率、传输步骤等做了统一规定,通信双方必须同时遵守才能完成数据交换。 TCP/IP协议 传输控制协议/因特网互联协议(Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。 上图中,TCP/IP协议中的四层分別是应用层、传输层、网络层和链路层,每层分別负责不同的通信功能。 链路层:链路层是用于定义物理传输通道

网络编程

偶尔善良 提交于 2020-02-08 00:20:15
IP地址分成两部分 网络部分:标识子网(子网掩码) 主机部分:标识主机(ip地址) 172.16.10.2:10101100.00010000.00001010.000000010 (ip) 255 255.255.255.0:11111111.11111111.11111111.00000000 (掩码) 172.16.10.0 (局域网地址) 都为1取1,其他取0 Arp协议解析IP得到子网地址(进而获取对方ip的mac地址) 局域网的ip(自动分配,动态的),mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址 两个ip子网地址一样:同一局域网>>>以太头(原mac,fffff?) ip头(ip1 ip2 ) 数据----通过交换机---->每台机器发一份,只有ip为ip2的机器响应并返回mac       不一样:不同局域网>>>以太头(原mac,fffff?) ip(ip1 路由器ip)头 端口头 数据-----通过交换机----->每台发一份,路由器(网关默认第4部分为1)响应,返回mac1                 以太头(mac1路由,fffff?)ip(ip路由1,ip2子网)-----路由协议------>返回ip2子网,路由mac2                 以太头(mac2路由,fffff?) ip(ip路由2,ip2)--------

1.Android网络编程-HTML介绍

孤者浪人 提交于 2020-02-08 00:16:01
1.HTML 介绍 超文本标记语言(HyperText Markup Language,简称:HTML)是一种用于创建网页的标准标记语言。 在Eclipse下则可以使用自带的浏览器浏览html: 2.HTML 常用元素标签 <head> 标签用于定义文档的头部 把 <head> 标签放在文档的开始处,紧跟在 <html> 后面 <head> 中的元素可以引用脚本、指示浏览器在哪里找到样式表、提供元信息等等。 下面这些标签可用在 head 部分: <base>, <link>, <meta>, <script>, <style>, <title> 比如: <meta charset="utf-8">: 元标签.告诉浏览器用utf-8编码来解析该文档 <title>123</title>: 用来显示网页的标题 <body> 文档的的内容标签 body 元素包含文档的所有内容(比如文本、超链接、图像、表格和列表等等。) 3.转义标记(空格、<、>、&、"、'、) & :   "& ",quotation mark的缩写 < : "< ",less-than的缩写 > :   "> ", greater than的缩写 " :   "" ", quote的缩写 ' :   "&apos; ",apostrophe的缩写 空格: " " 比如 html中输入:"a a",则只会显示"a a"

Python------网络编程3

我只是一个虾纸丫 提交于 2020-02-07 23:54:06
socket 套接字(模块):负责从传输层接收数据,并进行处理,并由底层交给操作系统。 作用 避免计算机学习各层的接口与协议的使用, socket 已经封装好了所有的接口,使用方便,提升开发效率。 socket 本质是一个模块。通过使用学习模块提供的功能,建立客户端与服务端的通信,使用方便. Socket 实现单个客户与服务端单通信: 服务端: import socket # 1. 创建socket对象(买手机) phone = socket.socket() # 可以默认不写 # 2. 绑定ip地址和端口(办卡) phone.bind(('127.0.0.1', 8848)) # 本地回环地址 # 3. 监听.(开机状态) phone.listen(5) # 4. 接收连接 print('start') conn, addr = phone.accept() # 程序暂进入待机状态,等待用户端发送信息 print(conn,addr) from_client_data = conn.recv(1024) # 至多接收1024个字节 print(f'来自客户端{addr}消息{from_client_data.decode("utf-8")}') to_client = input('>>>') conn.send(to_client.encode('utf-8')) conn