网络编程(一)基础知识

 2023-09-09 阅读 21 评论 0

摘要:1.1 Tcp数据发送 从机器A发给机器B, 数据发送是分解成很多信息包,到机器B后,机器B会重新合成在一起;在发送过程中,要求接收方没接收到一个包,需要反馈信息,如果没有反馈,tcp会自动重新发送,一直尝试目的是为了

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 客户端

可以直接采用pythonRequests 模块:

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

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/27889.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息