Python笔记之网络编程

1,学习这部分,应先了解一下OSI 7层模型,TCP/IP四层,Socket套接字等网络相关知识点。

Python网络库,urllib,urllib2,后者功能更强大一些。

import urllib2
import urllib
response = urllib2.urlopen('http://www.baidu.com') #获取百度首页的代码,打开远程文件
urllib.urlretrieve(‘http://www.baidu.com','baidu_index.html')     #下载文件并保存到本地
html = response.read()
print html

还有smtplib,email,cgi,httplib,ftplib,Cookie等其他模块,现用现查即可。


2,socket模块

服务器端Demo

import socket
s = socket.socket() #
host = socket.gethostname()
port = 1234
s.bind((host,port))
s.listen(5)
while True:
     c,addr = s.accept()
     print 'client link from:',addr
     c.send('Hello, client. This is server')
     c.close()

SocketServer模块,简化服务器端编程。

from SocketServer import TCPServer,StreamRequestHandler

class Handler(StreamRequestHandler):
	def handle(self):     #处理放在handle方法中
		addr = self.request.getpeername()
		print 'get link from:',addr
		self.wfile.write('welcome, link succeed')

server = TCPServer(('',1234),Handler)
server.serve_forever()	#begin to listen and handle link
#运行结果
bowen:~ bowen$ vimSocketServer_server.py
bowen:~ bowen$ python SocketServer_server.py
get link from: ('192.168.42.184', 49533)

客户端Demo

import socket

s = socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host,port))     #连接服务器
print s.recv(1024)
s.close()

服务器与客户端通信Demo

bowen:Python bowen$ cat server.py
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)	#create Socket
sock.bind(('localhost',8001))	#bind ip and port
sock.listen(5)	#start listening
while True:
	conn,addr = sock.accept()
	print 'link from:',addr
	try:
		conn.settimeout(5)
		buff = conn.recv(1024)
		if buff == '1':
			conn.send('welcome to server')	#send msg to client
		else:
			conn.send('Plead go out')
	except socket.timeout:
		print 'time out exception'
	conn.close()	#close link

bowen:Python bowen$ cat client.py
import socket
import time

sock = socket.socket()
sock.connect(('localhost',8001))
time.sleep(2)
sock.send('1')
print sock.recv(1024)	#recv msg from server
sock.close()
#运行结果
bowen:~ bowen$ vimSocketServer_server.py
bowen:~ bowen$ python SocketServer_server.py
get link from: ('192.168.42.184', 49533)

3,异步通信

1,分叉方式(ForkingMixIn);Server类提供了多连接处理,和数据传输服务。

from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandler

class Server(ForkingMixIn, TCPServer):
	pass

class Handler(StreamRequestHandler):
	def handle(self):
		addr = self.request.getpeername()
		print 'get link from:',addr
		self.wfile.write('many links by fork')

if __name__ == '__main__':
	server = Server(('localhost',1234),Handler)
	server.serve_forever()

2,线程方式(ThreadingMixIn);与分叉处理类似,区别仅在于Server继承的是ThreadingMixIN

from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler

class Server(ThreadingMixIn, TCPServer):
	pass

class Handler(StreamRequestHandler):
	def handle(self):
		addr = self.request.getpeername()
		print 'get link from:',addr
		self.wfile.write('many links in Thread way')

if __name__ == '__main__':
	server = Server(('localhost',1234),Handler)
	server.serve_forever()

3,异步I/O方式,select()方法用于对指定的文件描述符进行监视,并在描述符改变时做出响应。还有poll()方法也可实现。

import socket, select
s = socket.socket()
s.bind(('localhost',1234))
s.listen(5)

inputs = [s]	#store socket req
while True:
	rs,ws,es = select.select(inputs,[],[])	#use select()
	for r in rs:
		if r is s:
			conn,addr = s.accept()
			print 'get link form:',addr
			inputs.append(conn)	#put socket conn  into inputs
		else:
			try:
				    data = r.recv(1024)
				    disconnected = not data
			except socket.error:
				    disconnected = True
			if disconnected:
				    print r.getpeername(),' disconnected'
				    inputs.remove(r)
			else:
				<span style="white-space:pre">	</span>    print data

时间: 2024-10-17 05:09:46

Python笔记之网络编程的相关文章

python高级之网络编程

python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说到网络通信,那就不得不说TCP/IP协议簇的OSI七层模型了,这个东西当初在学校都学烂了...(PS:毕竟本人是网络工程专业出身...) 简单介绍下七层模型从底层到上层的顺序:物理层(定义物理设备的各项标准),数据链路层(mac地址等其他东西的封装),网络层(IP包头的的封装),传输层(TCP/UD

Linux程序设计学习笔记----Socket网络编程基础之TCP/IP协议簇

转载请注明出处: ,谢谢! 内容提要 本节主要学习网络通信基础,主要涉及的内容是: TCP/IP协议簇基础:两个模型 IPv4协议基础:IP地址分类与表示,子网掩码等 IP地址转换:点分十进制\二进制 TCP/IP协议簇基础 OSI模型 我们知道计算机网络之中,有各种各样的设备,那么如何实现这些设备的通信呢? 显然是通过标准的通讯协议,但是,整个网络连接的过程相当复杂,包括硬件.软件数据封包与应用程序的互相链接等等,如果想要写一支将联网全部功能都串连在一块的程序,那么当某个小环节出现问题时,整只

Python:笔记(3)——面向对象编程

Python:笔记(3)--面向对象编程 类型与对象 术语 程序中存储的所有数据都是对象.每个对象都有一个身份.一个类别和一个值. 如:a=42,就是用值42创建了一个整数对象. 大多数对象都拥有大量特点的属性和方法. 属性就是与对象相关的值. 方法就是被调用时将在对象上执行某些操作的函数. 使用 . 运算符可以访问属性和方法. Python中对象的一些说明 检查对象类型最佳的方式是利用内置函数 isinstance(object,type) 所有对象都有引用计数,当一个对象的引用计数归零时,他

Python四大主流网络编程框架

目前Python的网络编程框架已经多达几十个,逐个学习它们显然不现实.但这些框架在系统架构和运行环境中有很多共通之处,本文带领读者学习基于Python网络框架开发的常用知识,及目前的4种主流Python网络框架:Django.Tornado.Flask.Twisted. 网络框架及MVC架构 所谓网络框架是指这样的一组Python包,它能够使开发者专注于网站应用业务逻辑的开发,而无须处理网络应用底层的协议.线程.进程等方面.这样能大大提高开发者的工作效率,同时提高网络应用程序的质量. 在目前Py

python学习笔记11 ----网络编程

网络编程 网络编程需要知道的概念 1.网络体系结构就是使用这些用不同媒介连接起来的不同设备和网络系统在不同的应用环境下实现互操作性,并满足各种业务需求的一种粘合剂.网络体系结构解决互质性问题彩是分层方法. 网络(OSI)的7层模型: 应用层--->为应用程序提供网络通信服务 表示层--->数据表示 会话层--->主机间通信(两个应用进程间) 传输层--->端到端的连接,隔离网络的上下层协议,使得网络应用与下层协议无关 网络层--->寻找最优路径,转发数据包 数据链路层---&

Python TCP通信网络编程

最近在看廖雪峰老师的基础教程(http://www.liaoxuefeng.com/),今天实现了一下简单Python的Socket的网络编程. 1. Socket网络编程 Socket是网络编程的一个抽象概念.通常我们用一个Socket表示“打开了一个网络链接”,而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 2. 客户端 大多数连接都是可靠的TCP连接.创建TCP连接时,主动发起连接的叫客户端,被动响应连接的叫服务器.举个例子,当我们在浏览器中访问新浪时,我

Python实践之网络编程1-简单的网络请求程序

在了解python基础的语法基础上,就可以自由的去组合出自己需要各类高级功能. 由于python语言的特性,各类功能的实现都会非常快捷的. 网络变成就是python具备的高级特性之一. 需要进行网络编程首先需要了解几个模块urllib和urllib2 1.简单的访问请求 import sys,urllib,urllib2 url=input("please input the url:") url = "http://mail.126.com" #发起请求 req

笔记3 网络编程 egon

socket编程 什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议. 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的. 基于文件类型的套接字家族 套接字家族的名

python之路 -- 网络编程

1.软件开发的架构 - C/S架构(需要安装应用程序使用的软件) c client 客户端 s server 服务端 - B/S架构(可以通过浏览器使用的) b broser 浏览器 s server 服务端 不需要额外的安装客户端了,只需要一个网址就可以访问 轻量级,使用成本低 2.tcp协议/udp协议 tcp协议 全双工的通信协议 建立了专门穿送数据的通道(连接),是一个长连接 面向流的传输 传输速率比udp协议慢 数据安全不容易丢失 大文件算法自己拆包编号发送 建立连接的 三次握手 断开