python 网络编程

 python 网络

 
客户端:
import socket
s=socket.socket()
host = socket.gethostname()
port = 1234
s.connect((host, port))
print s.recv(1024)
 
服务端:
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('Thank you for connecting')
    c.close()
    
http编程
from urllib import urlopen
webpage = urlopen('http://www.python.org')
 
加上正规表达式
import re
text = webpage.read()
m = re.search('<a href="([^"]+)" .*?>about</a>', text, re.IGNORECASE)
m.group(1)
 
urllib
urllib2
 
一个基于SocketServer的小型服务器例子:
from SocketServer import TCPServer, StreamRequestHandler
>>> class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from', addr
self.wfile.write('Thank you for connecting')
 
>>> server = TCPServer(('',1234), Handler)
>>> server.serve_forever()
 
 
使用SocketServer进行分叉和线程处理
分叉Server:
from SocketServer import TCPServer,ForkingMinIn, StreamRequestHandler
class Server(ForkingMinIn, TCPServer):pass
class Handler(StreamRequestHandler):
    def handle(self):
        addr = self.request.getpeername()
        print 'Got connection from',addr
        self.wfile.write('Thank you for connection')
server = Server(('',1234),Handler)
server.serve_forever()
 
线程Server:
from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandler
class Server(ThreadingMixIn, TCPServer):pass
class Handler(StreamRequestHandler):
    def handle(self):
        addr = self.request.getpeername()
        print 'Got connection from',addr
        self.wfile.write('Thank you for connecting')
server = Server(('',1234),Handler)
server.serve_forever()
 
带有select和pool的异步I/O
select服务:
import socket, select
s = socket.socket()
host = socket.gethostname()
prot = 1234
s.bind((host,port))
 
s.listen(5)
inputs = [s]
while True:
    rs,ws,es = select.select(inputs,[],[])
    for r in rs:
        if r is s:
        c, addr = s.accept()
        print 'Got connection from',addr
        inputs.append(c)
    else:
        try:
            data = r.recv(1024)
            disconnected = not data
        except socket.error:
            disconnected = True
            
        if disconnected:
            print r.getpeername(), 'disconnected'
            inputs.remove(r)
        else:
            print data
            
pool服务器:
import socket, select
s = socket.socket()
host = socket.gethostname()
port = 1234
s.bind((host, port))
 
fdmap = {s.fileno():s}
 
s.listen(5)
p = select.poll()
p.register(s)
while True:
    events = p.poll()
    for fd, event in events:
        if fd in fdmap:
            c, addr = s.accept()
            print 'Got connection from', addr
            p.register(c)
            fdmap[c.fileno()]=c
        elif event & select.POLLIN:
            data = fdmap[fd].recv(1024)
            if not data:
                print fdmap[fd].getpeername(),'disconnected'
                p.unregister(fd)
                del fdmap[fd]
        else:
            print data
            
            
Twisted网络框架

你可能感兴趣的:(python,网络编程)