2018-09-13 网络编程

Python是一个很强大的网络编程工具

一、python内有很多针对常见网络协议的库,对网络协议的各个层次进行了抽象封装,因此使用python编写程序不必关心网络实现的细节

二、python非常善于处理字节流的各种模式,使用python可以很容易地写出处理各种协议格式的代码

(1)urllib和urllib2

互联网基本原理是基于“请求-响应”模式,获取互联网上的资源需要发出请求,即URL  (地址)

Python中实现的urllib和urllib2,功能很强大,通过它们访问网络上的文件,就像访问本地电脑的文件一样两个模块的功能都差不多,但urllib2更好一些

如果只需要简单的下载,使用urllib就能够满足要求如果需要使用HTTP验证或cookie或要为自己的协议编写扩展程序的话,urllib2是更好的选择

使用urllib.request模块下载文件,使用urlretrieve()方法

语法:

urlretrieve(url,[filename,reporthook])

参数url代表资源路径

参数filename指定本地保存路径

参数reporthook是一个回调函数,当连接上服务器、以及相应的数据库传输完毕时会触发回调,可以利用来显示下载进度

使用urllib2可以像打开本地文件一样打开远程文件,不同之处是只能使用只读模式

打开远程文件使用的方法是urlopen(),传递给它的参数是URL

urlopen()返回一个能从中读取数据的类文件对象,支持多种方法:read、readline、readlines、close

练习:根据中国天气网(www.weather.com.cn)提供的查询接口来获取天气信息

例子:http://www.weather.com.cn/data/cityinfo/101010100.html 查询北京市天气信息

中国天气网城市代码:

利用中国天气网提供的接口,能够获取到对应城市的天气信息

获取到的信息结构类似一个有两层的字典

最外层只有一个键“weatherinfo”,它的值是另外一个字典,里面包含了很多天气信息

这种数据结构被称为“json格式”

Json是一种轻量级的数据交换格式,是一种完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、Python等),这些特性使json成为了理想的数据交换语言

Python标准库中也包含了json模块,模块中的一些方法能帮助更好的处理这种json格式的数据,例如通过loads方法就能将json数据转换成真正的字典


(2)socket

套接字(socket)是网络编程中的一个基本组件,是两个端点的程序之间的“信息通道

套接字包括两个:服务器套接字和客户端套接字

无论是服务器还是客户端,都首先需要调用socket模块中的socket()方法来创建socket对象

socket()方法的格式:socket(family,type)

Family 参数代表地址家族,可以是AF_INET或AF_UNIX,AF_INET 代表IPv4地址,AF_UNIX只能用于单一的Unix系统进程间通信

type参数代表套接字类型,可以是SOCK_STREAM或SOCK_DGRAM,SOCK_STREAM代表流套接字,应用于TCP,SOCK_DGRAM代表数据报套接字,应用于UDP

流套接字和数据报套接字的区别:

1、流套接字区分服务器和客户端,数据报套接字不区分

2、流套接字适合传输数据量大的,数据报套接字适合传输数据量小的

3、客户的流套接字单向传递,数据报套接字可以接收任何方向的数据,并可以向任何地址发送数据报

4、流套接字使用时不需考虑底层细节,依靠TCP协议进行可靠的数据传输数据报套接字依靠UDP协议,数据传输效率高,但需要考虑底层细节,在代码中保证数据的可靠传输

5、流套接字依靠TCP协议建立好连接后发送数据,不需要指定地址数据报套接字依靠UDP协议发送数据,每次都需要指定发送给谁

 服务器socket函数:

bind(address)方法将套接字绑定到地址,参数address以元组(host,port)的形似表示地址

listen(backlog)方法开始监听TCP传入连接,参数backlog为操作系统可以挂起的最大连接数,至少为1-5

accept()方法接收TCP连接并返回元组(conn,address),conn是新的socket对象,服务器必须通过它与客户通信,address是客户的地址

客户端socket函数:

connect(address)方法连接到指定地址的套接字,参数address格式为元组(host,port)地址

connect_ex(address)方法与connect()方法相同,但是成功返回0,失败返回errno

公共socket函数:

recv(bufsize)接收TCP数据,参数bufsize指定接收的最大数据量,结果以字符串形式返回

send(string)发送TCP数据,参数string是字符串,返回值是要发送的数据量

sendall(string)完整发送TCP数据,在返回之前会尝试发送所有数据

recvfrom(bufsize)接收UDP数据,返回值是(data,address),address指明发送方地址

sendto(string,address)发送UDP数据,参数中也需指明address(接收方地址)

settimeout(timeout)设置套接字操作的超时时间,参数timeout是浮点数,单位为秒

close()关闭套接字

编写服务端socket思路:

1、创建套接字,绑定套接字到本地IP和端口

2、开始监听连接

3、进入循环,不断接收客户端的请求

4、接收传来的数据,并发送给对方数据

5、传输完毕后,关闭套接字

编写客户端socket思路:

1、创建套接字,连接服务器地址

2、连接后发送和接收数据

3、传输完毕后,关闭套接字

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • 文章首发于个人blog欢迎指正补充,可联系lionsom_lin@qq.com原文地址:《网络是怎样连接的》阅读整...
    lionsom_lin阅读 14,081评论 6 31
  • 引言 网络学习的核心内容就是网络协议的学习 网络协议:网络中进行数据交换而建立的规则、标准或者说是约定的集合因为不...
    _凉风_阅读 1,946评论 8 22
  • 01感触 今天付费在【得到】上订阅了李笑来老师的专栏《通往财富自由之路》,几篇文章看下来,感触颇深。在此之前我看了...
    安悦微阅读 424评论 6 4
  • 午加餐:葡萄干瓜子仁小饼晚水果:蓝莓西瓜荔枝 参考目标: 1份肉2份豆制品3份“新鲜”水果4份谷物/薯5份蔬菜,深...
    静趣_儿童心理师阅读 277评论 0 0
  • 我,一个叫做静静地普罗大众,身高就差那么一丢丢到一米六了,眼睛小但是对称呀,鼻子塌但是小巧呀,牙齿不整齐但是白呀...
    小米粒加巧克力阅读 398评论 0 6