Python network programming common code segment, python Network Programming
Server code:
#-*-Coding: cp936-*-import socket sock = socket. socket (socket. AF_INET, socket. SOCK_STREAM) # initialize socket sock. bind ("127.0.0.1", 8001) # bind the local address, port 8001 sock. listen (5) # Wait for the client to connect while True: print "waiting client connection... "connection, address = sock. accept () # receive client connection request print "a client have connected... "while True: try: connection. settimeout (5) # Set the timeout value buf = connection. recv (1024) # receive data if buf = "1": conn Ection. send ("you have send me 1! Welcome to server! ") Elif buf =" 2 ": connection. send (" you have send me 2! I have recv! ") Elif buf =" 3 ": connection. send (" close the connection! ") Break else: connection. send (" unknow command! ") Failed t socket. timeout: print" time out "connection. close () print" a client exit ..."
Client code:
import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(("127.0.0.1", 8001)) import time time.sleep(2)while True: data=raw_input("input command:"); sock.send(data) print sock.recv(1024) if data=="3": breaksock.close()
1. First, open two IDLE to open the server and client code respectively.
2. When F5 runs the server code, the waiting client connection...
3. When F5 runs the client code, input command :;
4. Now the server and client are connected and can communicate normally,
5.when the server code is run again, an error may occur. In this case, you can use the task manager to stop the pythonw.exe process and re-open the process. compile it!
Client:
import sockets=socket.socket()host = socket.gethostname()port = 1234s.connect((host, port))print s.recv(1024)
Server:
import sockets = socket.socket()host = socket.gethostname()port = 1234s.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 Programming
from urllib import urlopenwebpage = urlopen('http://www.python.org')
Add a regular expression
import retext = webpage.read()m = re.search('<a href="([^"]+)" .*?>about</a>', text, re.IGNORECASE)m.group(1)
Urllib
Urllib2
An example of a small SocketServer-based server:
from SocketServer import TCPServer, StreamRequestHandler>>> class Handler(StreamRequestHandler):def handle(self):addr = self.request.getpeername()print 'Got connection from', addrself.wfile.write('Thank you for connecting') >>> server = TCPServer(('',1234), Handler)>>> server.serve_forever()
Use SocketServer for forks and thread processing
Forking Server:
from SocketServer import TCPServer,ForkingMinIn, StreamRequestHandlerclass Server(ForkingMinIn, TCPServer):passclass 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()
Thread Server:
from SocketServer import TCPServer, ThreadingMixIn, StreamRequestHandlerclass Server(ThreadingMixIn, TCPServer):passclass 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()
Asynchronous I/O with select and pool
Select Service:
import socket, selects = socket.socket()host = socket.gethostname()prot = 1234s.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 Server:
import socket, selects = socket.socket()host = socket.gethostname()port = 1234s.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 network framework
Http://www.bkjia.com/article/64199.htm