从之前笔记的四个程序中(http://www.cnblogs.com/take-fetter/p/8278864.html),我们可以看出分别使用了谷歌地理编码API(对URL表示地理信息查询和如何获取JSON数据都进行的封装)、URL(标识了可通过HTTP获取的文档)、HTTP(支持面向文档的命令,例如GET,使用了原始的TCP/IP套接字,也是在这里遇到了一点麻烦,需要自行处理301错误)、TCP/IP套接字(只处理字符串的发送和接收)。层层深入,Python对各网络层都提供了非常全面的支持。显然也能看出来,越底层程序的质量也明显随之下降。高层的网络协议通常会将其底层网络细节隐藏(类似于OSI参考模型中下层为上层提供服务的概念)。正确实现网络协议并非易事(类如我们遇到的301问题和需要使用代理访问的问题),因此我们尽可能使用标准库和第三方库来实现(造轮子难啊:( )。

  socket()API之下的几层:Transmission Control Protocol (TCP)、Internet Protocol (IP)、最底层的链路层(书上是这么写的,但是按照OSI参考模型应该还有物理层吧)

  书中在第一章中还提到了以下相关知识:

  • 编码与解码

   Python3对字符串和底层字节序列做了明显的区分(字节Byte(8位二进制数)和字符串(包含Unicode字符)),二者的转化使用编码(字符串to字节,encode()方法)和解码(字节to字符串,decode()方法)操作。

  例如书中的程序我做了一点简单的改变

  

#!/usr/bin/env python3
# Foundations of Python Network Programming, Third Edition
# https://github.com/brandon-rhodes/fopnp/blob/m/py3/chapter01/stringcodes.py if __name__ == '__main__':
# Translating from the outside world of bytes to Unicode characters.
input_bytes = b'\xff\xfe4\x001\x003\x00 \x00i\x00s\x00 \x00i\x00n\x00.\x00'
input_characters = input_bytes.decode('utf-16')
print(repr(input_characters)) # Translating characters back into bytes before sending them.
output_characters = 'We copy you down, Eagle.\n'
output_bytes = output_characters.encode('utf-8')
with open('eagle.txt', 'wb') as f: # wb以二进制形式写入文件eagle.txt
f.write(output_bytes)
print(output_bytes)

输出结果为

'413 is in.'
b'We copy you down, Eagle.\n'

而写入文件的结果为

We copy you down, Eagle.
  • 网际协议Internet Protocol (IP)与IP地址

    将主机名转换为IP地址

import socket

if __name__ == '__main__':
hostname = 'www.qq.com'
addr = socket.gethostbyname(hostname)
print('The IP address of {} is {}'.format(hostname, addr))

    IPv4(32位二进制数)

    特殊的IP地址段 127.*.*.*(预留地址段) 10.*.*.*  172.16-31.*.* 192.168.*.* (私有子网 private subnet)

    IPv6(32*4=128位二进制数)

  • 路由
  • 数据包分组(DF标记,是否对大于MTU的数据包进行分组)

   补充下 IP头部20字节,TCP头部20字节,UDP头部8字节,以太网的最大容量(包含头部)共1500B

   关于计算机网络部分的知识,还是不细讲了,回顾一下基础知识。

《Python网络编程》学习笔记--从例子中收获的计算机网络相关知识的更多相关文章

  1. python网络编程学习笔记(三):socket网络服务器(转载)

    1.TCP连接的建立方法 客户端在建立一个TCP连接时一般需要两步,而服务器的这个过程需要四步,具体见下面的比较. 步骤 TCP客户端 TCP服务器 第一步 建立socket对象  建立socket对 ...

  2. python网络编程学习笔记(10):webpy框架

    转载请注明:@小五义http://www.cnblogs.com/xiaowuyi django和webpy都是python的web开发框架.Django的主要目的是简便.快速的开发数据库驱动的网站. ...

  3. 转 网络编程学习笔记一:Socket编程

    题外话 前几天和朋友聊天,朋友问我怎么最近不写博客了,一个是因为最近在忙着公司使用的一些控件的开发,浏览器兼容性搞死人:但主要是因为这段时间一直在看html5的东西,看到web socket时觉得很有 ...

  4. python网络爬虫学习笔记

    python网络爬虫学习笔记 By 钟桓 9月 4 2014 更新日期:9月 4 2014 文章文件夹 1. 介绍: 2. 从简单语句中開始: 3. 传送数据给server 4. HTTP头-描写叙述 ...

  5. 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理

    (1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...

  6. python网络编程学习《一》

    最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以 ...

  7. python网络爬虫学习笔记(一)Request库

    一.Requests库的基本说明 引入Rquests库的代码如下 import requests 库中支持REQUEST, GET, HEAD, POST, PUT, PATCH, DELETE共7个 ...

  8. JAVA TCP网络编程学习笔记

    一.JAVA网络编程概述 网络应用程序,就是在已实现网络互联的不同计算机上运行的应用程序,这些程序之间可以相互交换数据.JAVA是优秀的网络编程语言,Java网络编程的类库位于java.net包中.J ...

  9. Java Socket网络编程学习笔记(一)

    0.前言 其实大概半年前就已经看过网络编程Socket的知识了(传统IO),但是因为长时间的不使用导致忘的一干二净,最近正好准备校招,又重新看了网络编程这一章, 是传统IO(BIO)相关的内容,故在此 ...

随机推荐

  1. bzoj:3392: [Usaco2005 Feb]Part Acquisition 交易

    Description     奶牛们接到了寻找一种新型挤奶机的任务,为此它们准备依次经过N(1≤N≤50000)颗行星,在行星上进行交易.为了方便,奶牛们已经给可能出现的K(1≤K≤1000)种货物 ...

  2. BLE空中升级 谈(一)

    BLE 空中升级谈 -- CC2541 的产品开发中OAD注意事项 现在的智能设备(可穿戴,智能家居,智能玩具等)是越来越多了,大公司的产品颜值高,功能强大而完备的应该说是比比皆是,这里不谈论它是满足 ...

  3. LinkedHashMap 源码详细分析(JDK1.8)

    1. 概述 LinkedHashMap 继承自 HashMap,在 HashMap 基础上,通过维护一条双向链表,解决了 HashMap 不能随时保持遍历顺序和插入顺序一致的问题.除此之外,Linke ...

  4. [国嵌攻略][174][CGI快速入门-网页控制LED]

    CGI程序(Common Gate Way Interface) 在服务器外部供服务器调用的程序,CGI程序与服务器配合后能让服务器完成更强大的功能. 1.浏览器通过HTML表单或超链接请求指向一个C ...

  5. chorme调试Paused in debugger问题解决

    最近出现的问题,使用chorme调试代码总是这个状态(Paused in debugger[debug的时候暂停了]): 一刷新就这样,非常的不舒服.当然你可以选择多按几次F8跳出,下面提供几种方式解 ...

  6. 98、vue.js简单入门

    本篇导航: 介绍与安装 vue常用指令 一.介绍与安装 vue是一套构建用户界面的JAVASCRIPT框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层, ...

  7. Use LiveCD to acquire images from a VM

    Forensic examiners usually acquire images from suspect's PC or Laptop. What if the target computer i ...

  8. Laravel 验证中文本地化

    1.使用bootsrap好看的提示样式 但是会提示英文 2.将提示中文本地化 2.1.在/resouce/lang下创建文件夹:zh 2.2.已经有小伙伴做好了翻译 https://gist.gith ...

  9. 如何把域名解析到网站空间IP上?

    建立网站首要就是要有一个域名和网站空间,怎么把这两者联系在一起呢?这就要通过域名解析,把域名指向空间的IP,让我们能够通过域名访问网站空间.通过域名解析把我们容易记住的域名转化成IP地址,由DNS服务 ...

  10. 调用QQ聊天功能

    [HTML]: <a href="javascript:void(0);" onclick="chatQQ()">咨询客服</a> fu ...