socket
2016-06-26 15:04
232 查看
client_test.py
Server_test.py
SocketServer.py
urllib_test.py
#client import socket s=socket.socket() host=socket.gethostname() port=1234 s.connect((host,port)) #使用的地址与bind方法中地址相同 print(s.recv(1024).decode('utf-8')) s.send(b'thanks again from client\r\n') s.close()
Server_test.py
#server #阻塞,同步网络编程 import socket s=socket.socket() #地址族,流或数据报套接字,使用的协议 host=socket.gethostname() port=1236 #低于1024的端口号用于标准服务 s.bind((host,port)) s.listen(5) #参数服务器未处理的连接的长度(即允许排队等待的连接数目) while True: c,addr=s.accept() print('got connection from',addr) #python 3.2 socket.send传送数据必须是byte #c.send(bytes('thanks for connection','UTF-8')) c.send(b'thanks for connection') print(c.recv(1024).decode('utf-8')) #收到b'Hello' 删掉前面b c.close() s.close()
SocketServer.py
#SocketServer ''' SocketServer是标准库中很多服务器框架的基础,这些框架包括BaseHTTPServer,SimpleHTTPServer, CGIHTTPServer,SimpleXMLRPCServer,DocXMLRPCServer, 所有这些服务器框架都为基础服务器增加了特定的功能 SockerServer包含4个基本的类,针对TCP套接字流的TCPServer,UDP数据报套接字的UDPServer, 以及针对性不强的UnixStreamServer和UnixDatagramServer ''' from socketserver import TCPServer,StreamRequestHandler class Handler(StreamRequestHandler): def handle(self): addr=self.request.getpeername() print('from',addr) self.wfile.write(b'thanks') print(self.rfile.read(1024).decode()) server=TCPServer(('',1234),Handler) server.serve_forever() ''' 为了写一个使用SocketServer框架的服务器,大部分代码会在一个请求处理程序中(request handler)。 每当服务器收到一个请求(来自客户端的连接)时,就会实例化一个请求处理程序, 并且他的各种处理程序类(handler class),这样可以把他们子类化,使得服务器调用自定义的处理程序集。 基本的BaseRequestHandle类把所有的操作都放到了处理器的一个叫做handle的方法中, 这个方法会被服务器调用。 然后这个方法就会访问属性self.request中的客户端套接字 如果使用的是流(如果使用的是TCPServer,这就是可能的),那么可以使用StreamRequestHandler类, 创建了其他两个新属性,self.rfile(用于读取)和self.wfile(用于写入) 然后就能使用这些类文件对象和客户机进行通信 '''
urllib_test.py
#通过网络访问文件 #from urllib import urlopen from urllib.request import urlopen #python3的库位置跟python2的有点不同 from urllib.request import urlretrieve import re webpage=urlopen('http://www.baidu.com') 'http://www.python.org' #urlopen返回的类文件对象支持close,read,readline,readlines方法 #text=webpage.read().decode('utf-8') text=webpage.read().decode() ''' m=re.search('<a href="([^"]+)" .*?>about</a>',text,re.IGNORECASE) print(m.group(1)) ''' #访问本地文件,用以file开头的URL访问本地文件,试验urllib是否在线 webpage=urlopen(r'file:D:\program files\Python34\PyWorks\ABBREV.txt') print(webpage.read()) #希望urllib为你下载文件并在本地文件中存储一个文件的副本,可以使用urlretrieve #urlretrieve返回一个元组(filename,headers) #filename是本地文件的名字,headers包含一些远程文件的信息 filename,headers=urlretrieve('http://www.baidu.com','c:\\a.html') print('filename:\n',filename,'\n') print('headers:\n',headers) filename,headers=urlretrieve(r'file:D:\program files\Python34\PyWorks\ABBREV.txt', 'c:\\a.txt') print('filename:\n',filename,'\n') print('headers:\n',headers)
相关文章推荐
- 时间复杂度和空间复杂度详解
- java compiler level does not match the version of the installed java project
- git学习笔记--创建版本库
- 内连接与左连接,右连接和全连接的区别
- ORACLE-023:令人烦恼的 ora-01722 无效数字
- ORACLE-023:令人烦恼的 ora-01722 无效数字
- iOS Image KVO
- Java设计模式——模板模式
- android键盘监听
- 网络协议系列之二:HTTP(2)
- struts2 eclipse集成jdk与tomcat (2)
- NodeJs——(8)http.ServerRequest的过程
- 上传数据脚本
- Java多线程
- regular
- centos 开机不启动防火墙
- 暑假小计划
- .net后台自动执行任务
- 部署yum流程
- cmd %1