美文网首页
2018-09-13 网络编程

2018-09-13 网络编程

作者: 初见_0308 | 来源:发表于2018-09-13 19:57 被阅读0次

    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、传输完毕后,关闭套接字

    相关文章

      网友评论

          本文标题:2018-09-13 网络编程

          本文链接:https://www.haomeiwen.com/subject/rwsggftx.html