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

网络编程(一)基础知识相关推荐

  1. python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  2. python网络编程知识_python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  3. 网络游戏《丛林战争》开发与学习之(一):网络编程的基础知识

    <丛林战争>是一款完整的网络游戏案例,运用U3D开发客户端,Socket开发服务端,其中涉及到了网络编程.数据库和Unity的功能实现,之前通过U3D开发了一个单机游戏<黑暗之光&g ...

  4. 【网络编程】基础知识

    文章目录 1.分层模型 1.1OSI七层模型 1.2TCP/IP四层模型 2.网络应用程序设计模式 2.1C/S[client/server] 2.2 B/S[browser/server] 2.3协 ...

  5. 学习笔记:Java 并发编程①_基础知识入门

    若文章内容或图片失效,请留言反馈. 部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/av81461839 视频下载: ...

  6. 第一章: Vert.x 异步编程的基础知识

    第一章: Vert.x 异步编程的基础知识 翻译: 白石(https://github.com/wjw465150/Vert.x-Core-Manual) 构建反应式系统的第一步是采用异步编程.基于阻 ...

  7. Linux系统编程——进程基础知识

    Linux系统编程--进程基础知识 1.程序和进程 程序,是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu.内存.打开的文件.设备.锁-) 进程,是一个抽象的概念,与操作系统原理联系紧密.进程 ...

  8. 高等学校计算机科学与技术教材:tcp/ip网络编程技术基础,TCP/IP网络编程技术基础...

    TCP/IP网络编程技术基础 语音 编辑 锁定 讨论 上传视频 <TCP/IP网络编程技术基础>是2012年北京交通大学出版社出版的图书,作者是王雷. 书    名 TCP/IP网络编程技 ...

  9. 半小时入门MATLAB编程入门基础知识:

    https://learnxinyminutes.com/docs/zh-cn/matlab-cn/ 半小时入门MATLAB编程入门基础知识: % 以百分号作为注释符 %{ 多行注释 可以 这样 表示 ...

最新文章

  1. android 瀑布流的实现(用recyclerview的实现的)
  2. 报名丨24小时创新挑战:数字时代的人类健康与福祉
  3. 入门|机器学习中常用的损失函数你知多少?
  4. java task多线程_JAVA语言-多线程实现的四种方式
  5. 关卡设计快速入门_1. 创建新项目
  6. Ajax+asp.net实现用户登陆 转自http://www.shangxueba.com/jingyan/2933319.html
  7. 蓝桥杯基础练习--杨辉三角
  8. List 集合去重的 3 种方法
  9. php5.4连接mysql_PHP5.4+连MySQL数据库
  10. bochs x86模拟器
  11. npm收录了哪些包_使用VS Code轻松找到npm软件包中的漏洞(Vuln Cost)
  12. css3 flex流动自适应响应式布局样式类
  13. matlab拟合出余弦曲线,如何用matlab做正弦曲线拟合?
  14. Snipaste贴图软件使用方法及快捷键
  15. centos安装office及PDF阅读器
  16. 2016.10.9晨记
  17. 安装VS2008的时候Windows Mobile 5.0 SDK R2 for pocket pc错误解决方案
  18. 电子烟能破壳类四大天王“和大天壹”新物种么?
  19. mysql中导入csv文件_怎么把csv文件导入mysql?
  20. 最通俗易懂的SpringBoot经典学习笔记讲解

热门文章

  1. python坐标系转换库_转载:python库Pyproj进行坐标转换
  2. python返回函数值并退出函数_Python函数的返回值和作用域
  3. 反转二叉树 java_leetcode刷题笔记-226. 翻转二叉树(java实现)
  4. using 关键字有两个主要用途
  5. Java集合——概述
  6. 使用Fiddler查看APP的请求接口、接口参数和返回值的方法
  7. teamview修改id
  8. 七:构造方法与自定义构造方法
  9. soapUI中多个TestCase之间传递参数
  10. javascript关于数组合并的——非比寻常