python学习(十四) 网络编程
14.1 少数几个网络设计模块
14.1.1 socket模块
套接字包括:服务器套接字和客户机套接字。
在创建一个服务器套架字后,让它等待连接,这样它就在摸个网络地址处(IP地址和一个端口号的组合)监听,直到有客户套接字连接。连接完成后就可以交互了。
服务器套接字比较麻烦,因为必须随时准备处理客户端连接,同时处理多个连接。
一个套接字就是socket模块中的socket类的一个实例。实例化需要3个参数:
第一个是地址族,默认是socket.AF_INET;
第二个参数是流(socket.SOCK_STREAM)或数据报(socket.SOCK_DGRAM);
第三个参数是使用协议
服务器端Socket使用bind方法后,再调用listen方法去监听某个特定的地址。客户端套接字使用connect方法连接到服务器,在connect中使用的地址和服务器端bind的地址相同。
服务器端socket.gethostname,能得到主机名。
一个地址就是一个格式是(host,port)的元组,host是主机名,port是端口号。
listen方法只有一个参数,即服务器未处理的连接长度。
服务器端套接字开始监听后,就可以接受客户端连接。使用accept方法来完成。这个方法会阻塞(等待)直到有客户端连接,然后该方法就会返回一个格式为(client, address)的元组,client是一个客户端套接字,address是一个地址。服务器在处理完与该客户端的连接后,再调用accept方法开始等待下一个连接,这个过程通常在一个无限循环中实现的。
套接字有连个方法:send和recv,用于传输数据。可以使用字符串参数调用send发送数据,用一个所需的(最大的)字节数做参数调recv来接收数据。
server端
import socket
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
s.listen(5) while True:
c, addr = s.accept()
print('got connection from' % addr)
c.send('thanke you')
c.close
客户端: import socket
s = socket.socket()
host = socket.gethostname()
port = 1234 s.connect((host, port))
print s.recv(1024)
14.1.2 urllib和urllib2模块
功能最强大的网络模块就是urllib和urllib2,通过他们访问网络上的文件,就像访问本地电脑上的文件一样。
两个模块差不多,但是urllib2更好一些。如果只使用简单的下载,urllib足够了;如果要用到HTTP验证或cookie,或者要为自己的协议写扩展程序的话,那么URLlib2是更好的选择。
1)打开远程文件:
from urllib import urlopen
webpage = urlopen('http://www.python.org')
urlopen返回的文件类型支持close, read, realine和readlines
2)获取远程文件
urlopen返回的是能从中读取数据的类文件对象。如果希望urllib为你下载文件并在本地文件中存储一个文件的副本,那么可以使用urlretrieve.
返回元组(filename, headers).
14.1.3 其他模块
14.2 SocketServer和它的朋友们
14.3 多个连接
14.3.1 使用SocketServer进行分叉和线程处理
14.3.2 带有select和poll的异步I/O
14.4 Twisted
14.4.1 下载并安装Twisted
14.4.2 编写Twisted服务器
14.5 小结
python学习(十四) 网络编程的更多相关文章
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- python学习笔记11 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- python学习之路网络编程篇(第二篇)
新课程知识的引入:python作用域 #python中无块级别作用域 if 1 == 1 : name = 'alex' print(name) for i in range(10): name = ...
- python学习笔记10 ----网络编程
网络编程 网络编程需要知道的概念 网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. ...
- Python学习之==>Socket网络编程
一.计算机网络 多台独立的计算机通过网络通信设备连接起来的网络.实现资源共享和数据传递.在同一台电脑上可以将D盘上的一个文件传到C盘,但如果想从一台电脑传一个文件到另外一台电脑上就要通过计算机网络 二 ...
- 五十四 网络编程 TCP编程
Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 大多数连接都是可靠 ...
- python学习之路网络编程篇(第四篇)- 续
Memcache简介 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速 ...
- python学习之路网络编程篇(第一篇)socket初识
什么是socket 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为socket.socket通常也称为“套接字”,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的 ...
- Python学习十四:filter()
Python 中内置了filter()函数用于过滤序列. 使用方法: filter()接收一个函数和一个序列. filter()把传入的函数依次作用于每一个元素,然后依据返回值是True还是False ...
- python学习之路网络编程篇(第五篇)-续篇
Python堡垒机实现之基础知识 一般的堡垒机必须要具备以下5个基本功能: 1.权限控制 2.执行命令 3.上传下载文件 4.远程登录 5.记录操作 权限控制 说明:根据不同的登录用户分配不同的可管理 ...
随机推荐
- 【Demo】CSS3 3D转换
3D转换transform rotateX() 方法 rotateX()方法,围绕其在一个给定度数X轴旋转的元素. div { transform: rotateX(120deg); -webkit- ...
- hdu 5265
http://acm.hdu.edu.cn/showproblem.php?pid=5256 题目不错,题面忍不住骂一句mmp.......后面说ai都是正整数,我以为修改后也必须是正整数,前面又说只 ...
- 【Python】序列的方法
任何序列都可以引用其中的元素(item). 下面的内建函数(built-in function)可用于列表(表,定值表,字符串) #s为一个序列 len(s) 返回: 序列中包含元素的个数 min(s ...
- 使用PorterDuffXfermode画出刮刮奖效果p146-p148
package com.zzw.Qunyinzghuan3; import android.content.Context; import android.graphics.Bitmap; impor ...
- react use axios拦截器
import axios from 'axios'; improt Promise from 'es6-promise'; Promise.polyfill(); const axiosService ...
- 【SQL查询】视图_view
转自:http://database.e800.com.cn/articles/2009/719/1248015564465_1.html 视图是从一个或几个基本表(或视图)导出的表.它与基本表不同, ...
- 使用redis计数来控制单位时间内对某接口的访问量,防止刷验证码接口之类的
使用自定义注解的方式,在需要被限制访问频率的方法上加注解即可控制. 看实现方式,基于springboot,aop,redis. 新建Springboot工程,引入redis,aop. 创建注解 pac ...
- [置顶]
Android App引导页这些坑你自己犯过吗?
场景:测试机:华为荣耀6x 今天我自己掉入一个很蠢蠢的坑,一个引导页搞了20多分钟,不管我怎么测试用真机还是模拟器都无法运行,但是我写的demo完全没问题,好无语,我都怀疑我是不是搞android,我 ...
- 设置eclipse显示代码错误提示的
http://jingyan.baidu.com/article/f3e34a128d79aff5ea65356c.html
- mysql 存储过程查询语句
可以用 命令"show PROCEDURE status"查看所有的存储过程或检索系统表"mysql.proc"来查询已有的存储过程.例如:用show PROC ...