Python笔记之网络编程
来源:互联网 发布:红色管弦乐 知乎 编辑:程序博客网 时间:2024/05/17 23:02
1,学习这部分,应先了解一下OSI 7层模型,TCP/IP四层,Socket套接字等网络相关知识点。
Python网络库,urllib,urllib2,后者功能更强大一些。
import urllib2import urllibresponse = 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 sockets = socket.socket() #host = socket.gethostname()port = 1234s.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,StreamRequestHandlerclass Handler(StreamRequestHandler):def handle(self): #处理放在handle方法中addr = self.request.getpeername()print 'get link from:',addrself.wfile.write('welcome, link succeed')server = TCPServer(('',1234),Handler)server.serve_forever()#begin to listen and handle link
#运行结果bowen:~ bowen$ vimSocketServer_server.pybowen:~ bowen$ python SocketServer_server.pyget link from: ('192.168.42.184', 49533)
客户端Demo
import sockets = socket.socket()host = socket.gethostname()port = 1234s.connect((host,port)) #连接服务器print s.recv(1024)s.close()
服务器与客户端通信Demo
bowen:Python bowen$ cat server.pyimport socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#create Socketsock.bind(('localhost',8001))#bind ip and portsock.listen(5)#start listeningwhile True:conn,addr = sock.accept()print 'link from:',addrtry:conn.settimeout(5)buff = conn.recv(1024)if buff == '1':conn.send('welcome to server')#send msg to clientelse:conn.send('Plead go out')except socket.timeout:print 'time out exception'conn.close()#close linkbowen:Python bowen$ cat client.pyimport socketimport timesock = socket.socket()sock.connect(('localhost',8001))time.sleep(2)sock.send('1')print sock.recv(1024)#recv msg from serversock.close()
#运行结果bowen:~ bowen$ vimSocketServer_server.pybowen:~ bowen$ python SocketServer_server.pyget link from: ('192.168.42.184', 49533)
3,异步通信
1,分叉方式(ForkingMixIn);Server类提供了多连接处理,和数据传输服务。
from SocketServer import TCPServer,ForkingMixIn,StreamRequestHandlerclass Server(ForkingMixIn, TCPServer):passclass Handler(StreamRequestHandler):def handle(self):addr = self.request.getpeername()print 'get link from:',addrself.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,StreamRequestHandlerclass Server(ThreadingMixIn, TCPServer):passclass Handler(StreamRequestHandler):def handle(self):addr = self.request.getpeername()print 'get link from:',addrself.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, selects = socket.socket()s.bind(('localhost',1234))s.listen(5)inputs = [s]#store socket reqwhile 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:',addrinputs.append(conn)#put socket conn into inputselse:try: data = r.recv(1024) disconnected = not dataexcept socket.error: disconnected = Trueif disconnected: print r.getpeername(),' disconnected' inputs.remove(r)else:<span style="white-space:pre"></span> print data
0 0
- Python笔记之网络编程
- python 网络编程笔记
- Python网络编程笔记
- Python之网络编程
- python之网络编程
- Python之网络编程
- python之网络编程
- [代码笔记] python 之网络编程: 使用udp 发送音频文件
- python 网络编程基础 笔记
- python 网络编程笔记-socket
- 《Python网络编程基础》笔记
- python网络编程学习笔记
- Python笔记—网络编程
- python笔记8--python网络编程
- Python网络编程之medusa
- Python网络编程之medusa
- Python 网络之TCP编程
- Python 网络编程之UDP
- 图片分享与防盗链
- Mysql Too many connections问题
- 诺基亚2016年会重返智能手机市场?
- Hadoop storm知识
- 第9周项目6还原等式(1)
- Python笔记之网络编程
- 第9周项目6-穷举法解决组合问题
- MOOC开启教育在线互动模式,知识全球化进程快速
- Bochs 在Ubuntu 14.04 LTS x64 下安装
- 悲剧了!iPad mini 3跑分出炉 性能下降30%
- 第九周项目4我的小九九
- 作业报告15 输出星号图2
- spring3.2.4配置文件
- 移动App乱象多 国信办要出台管理政策了