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.记录操作 权限控制 说明:根据不同的登录用户分配不同的可管理 ...
随机推荐
- $1...$9 属性 (RegExp) (JavaScript)
返回在模式匹配期间找到的,所存储的最近的九个部分. 只读. RegExp.$n 参数 RegExp 始终为全局 RegExp 对象. n 1 至 9 之间的任意整数. 备注 每 ...
- python random使用生成随机字符串
应用python random标准库做一个随机生成密码的程序,可以随机生成任意多个字符.(基于python2.7,如果是python3需要修改下) 案例: #-*-coding:utf-8 -*-#a ...
- VS2015自带v120的Platform Toolset
在VS2015安装组件时,勾选 “Windows 8.1 和 Windows Phone 8.0/8.1”下面的“工具和 Windows SDK”,将会安装Visual Studio 2013 (v1 ...
- java String转Long两种方法区别
第一种:包装类型:Byte,Integer,Short,Long,Boolean,Character,Float,Double等8种 Long.valueOf("String")返 ...
- linux应用之wget命令详解
wget是linux最常用的下载命令, 一般的使用方法是: wget + 空格 + 要下载文件的url路径 例如: # wget linuxsense.org/xxxx/xxx.tar.gz" ...
- neutron之SDN简单测试
title: Neutron SDN 手动实现手册 date: 2017-04-13 23:37 tags: Network 本文旨在通过自己搭建类似neutron (openvswitch + gr ...
- ionic2——开发利器之Visual Studio Code 常用插件整理
1.VsCode官方插件地址: http://code.visualstudio.com/docs 2.使用方法,可以在官网中搜索需要的插件或者在VsCode的“”扩展“”中搜索需要的插件 添加方法使 ...
- sql如何分组选择显示最新的一条数据
怎样在数据库的一个表里筛选出每一人的时间最新的一条记录?用SQL语句 wenchuan408 wenchuan408 结帖率:100% sql数据库 yhh name ...
- dataGridView的使用经验
1.dataGridView是dataGrid的替代品,包含了dataGrid的全部功能. 2.为dataGridView赋值,一般将其数据设置为一个DataTabel.例子如下: DataTable ...
- C# 为什么用接口实例化一个实现该接口的类?
这是多态的体现. 首先接口不能实例化的. 实现接口的类 实例 = new 实现接口的类()// 这样用不好吗? //这样已经不是好不好的问题了,这样的话,要接口有什么用?//用接口就是让实例和实现类的 ...