从机器A发给机器B,
数据发送是分解成很多信息包,到机器B后,机器B会重新合成在一起;在发送过程中,要求接收方没接收到一个包,需要反馈信息,如果没有反馈,tcp会自动重新发送,一直尝试目的是为了防止某个包缺失,导致整个数据损坏;每个包都会有个序号,这样确保B端,收到所有的包后,能够重组数据。
要给B发送数据,首先要知道B电脑的地址,其次由于B电脑可能有很多个程序,比如:qq、邮件、浏览器等,你具体是要发送给哪个程序;所以有了端口这个概念,一个程序对应一个端口,端口取值范围一般是:1024~65535
网络编程、有的时候我们在学校、公司,要用公司的电脑搭建一个服务器,然后外网客户端可以使用;那么这个时候服务器的ip地址、端口要怎么设置:需要在路由器上设置把某一端口映射到B上,由A来连接路由器的这个端口。
DNS是一个分布式数据库,超级庞大;每条记录包含了:(域名,ip地址);
浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源。这里资源一般是指 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.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
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态