网络编程(一)基础知识
1.1 Tcp数据发送
从机器A发给机器B,
数据发送是分解成很多信息包,到机器B后,机器B会重新合成在一起;在发送过程中,要求接收方没接收到一个包,需要反馈信息,如果没有反馈,tcp会自动重新发送,一直尝试目的是为了防止某个包缺失,导致整个数据损坏;每个包都会有个序号,这样确保B端,收到所有的包后,能够重组数据。
1.2 IP地址与端口
要给B发送数据,首先要知道B电脑的地址,其次由于B电脑可能有很多个程序,比如:qq、邮件、浏览器等,你具体是要发送给哪个程序;所以有了端口这个概念,一个程序对应一个端口,端口取值范围一般是:1024~65535
1.3 内网与外网
有的时候我们在学校、公司,要用公司的电脑搭建一个服务器,然后外网客户端可以使用;那么这个时候服务器的ip地址、端口要怎么设置:需要在路由器上设置把某一端口映射到B上,由A来连接路由器的这个端口。
1.4 DNS
DNS是一个分布式数据库,超级庞大;每条记录包含了:(域名,ip地址);
1.5 浏览器
浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源。这里资源一般是指 HTML 文档,图片等其他的类型。资源的位置由用户使用 URL(统一资源标示符)指定。
而浏览器的核心——渲染引擎便是负责显示请求的内容。如果请求的内容是 HTML,它就负责解析 HTML 和 CSS 内容,并将解析后的内容显示在屏幕上。
工作流程:
1. 输入URL地址或者点击URL的一个链接
2. 浏览器根据URL地址,结合DNS,解析出URL对应的IP地址
1)浏览器通过发送一个TCP的包,要求服务器打开连接
2)服务器也通过发送一个包来应答客户端的浏览器,告诉浏览器可以发送数据给服务器
3)发送HTTP请求
4. 服务器接到请求后,返回相应的响应内容
5. 浏览器解析从服务器端返回的响应内容,并且把页面显现出来
当输入URL之后,浏览器就要知道这个URL对应的IP是什么,只有知道了IP地址,浏览器才能准备的把请求发送到指定的服务器的具体IP和端口号上面。然后服务器端把响应结果发送到客户端。这个响应结果就是html的文档,不包含什么图片,脚本,CSS等的,也就是页面的html结构。
1.6 web服务
1.6.1 客户端
可以直接采用python的Requests 模块:
r = requests.get('https://github.com/timeline.json')r = requests.post("http://httpbin.org/post")
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.get("http://httpbin.org/get", params=payload)
1.7 http格式
1.7.1 请求格式
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*
第一行是请求方法,以及版本
后面是:头、数据(表单内容)进行请求。
1.7.2 回应格式
服务器的回应如下。
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84<html><body>Hello World</body>
</html>
回应的格式是"头信息 + 一个空行(\r\n) + 数据"。其中,第一行是"协议版本 + 状态码(status code) + 状态描述"。
1.8 图片文件上传
客户端:
#coding=utf-8
import requests
url = 'http://localhost:8080'
path = u'D:快盘阿狸头像.jpg'
print path
files = {'file': open(path, 'rb')}
r = requests.post(url, files=files)
print r.url,r.text
服务端:
#coding=utf-8
from BaseHTTPServer import BaseHTTPRequestHandler
import cgi
class PostHandler(BaseHTTPRequestHandler): def do_POST(self): form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], } ) self.send_response(200) self.end_headers() self.wfile.write('Client: %sn ' % str(self.client_address) ) self.wfile.write('User-agent: %sn' % str(self.headers['user-agent'])) self.wfile.write('Path: %sn'%self.path) self.wfile.write('Form data:n') for field in form.keys(): field_item = form[field] filename = field_item.filename filevalue = field_item.value filesize = len(filevalue)#文件大小(字节) print len(filevalue) with open(filename.decode('utf-8')+'a','wb') as f: f.write(filevalue) return
if __name__=='__main__': from BaseHTTPServer import HTTPServer sever = HTTPServer(('localhost',8080),PostHandler) print 'Starting server, use <Ctrl-C> to stop' sever.serve_forever()
参考文献:
1、http://blog.csdn.net/testcs_dn/article/details/50449106
2、http://www.ruanyifeng.com/blog/2016/08/http.html
网络编程(一)基础知识相关推荐
- python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- python网络编程知识_python六十七课——网络编程(基础知识了解)
网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...
- 网络游戏《丛林战争》开发与学习之(一):网络编程的基础知识
<丛林战争>是一款完整的网络游戏案例,运用U3D开发客户端,Socket开发服务端,其中涉及到了网络编程.数据库和Unity的功能实现,之前通过U3D开发了一个单机游戏<黑暗之光&g ...
- 【网络编程】基础知识
文章目录 1.分层模型 1.1OSI七层模型 1.2TCP/IP四层模型 2.网络应用程序设计模式 2.1C/S[client/server] 2.2 B/S[browser/server] 2.3协 ...
- 学习笔记:Java 并发编程①_基础知识入门
若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...
- 第一章: Vert.x 异步编程的基础知识
第一章: Vert.x 异步编程的基础知识 翻译: 白石(https://github.com/wjw465150/Vert.x-Core-Manual) 构建反应式系统的第一步是采用异步编程.基于阻 ...
- Linux系统编程——进程基础知识
Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...
- 高等学校计算机科学与技术教材:tcp/ip网络编程技术基础,TCP/IP网络编程技术基础...
TCP/IP网络编程技术基础 语音 编辑 锁定 讨论 上传视频 <TCP/IP网络编程技术基础>是2012年北京交通大学出版社出版的图书,作者是王雷. 书 名 TCP/IP网络编程技 ...
- 半小时入门MATLAB编程入门基础知识:
https://learnxinyminutes.com/docs/zh-cn/matlab-cn/ 半小时入门MATLAB编程入门基础知识: % 以百分号作为注释符 %{ 多行注释 可以 这样 表示 ...
最新文章
- android 瀑布流的实现(用recyclerview的实现的)
- 报名丨24小时创新挑战:数字时代的人类健康与福祉
- 入门|机器学习中常用的损失函数你知多少?
- java task多线程_JAVA语言-多线程实现的四种方式
- 关卡设计快速入门_1. 创建新项目
- Ajax+asp.net实现用户登陆 转自http://www.shangxueba.com/jingyan/2933319.html
- 蓝桥杯基础练习--杨辉三角
- List 集合去重的 3 种方法
- php5.4连接mysql_PHP5.4+连MySQL数据库
- bochs x86模拟器
- npm收录了哪些包_使用VS Code轻松找到npm软件包中的漏洞(Vuln Cost)
- css3 flex流动自适应响应式布局样式类
- matlab拟合出余弦曲线,如何用matlab做正弦曲线拟合?
- Snipaste贴图软件使用方法及快捷键
- centos安装office及PDF阅读器
- 2016.10.9晨记
- 安装VS2008的时候Windows Mobile 5.0 SDK R2 for pocket pc错误解决方案
- 电子烟能破壳类四大天王“和大天壹”新物种么?
- mysql中导入csv文件_怎么把csv文件导入mysql?
- 最通俗易懂的SpringBoot经典学习笔记讲解