python 网络编程常用代码段
发布时间:2020-12-16 20:26:29 所属栏目:Python 来源:网络整理
导读:服务器端代码: # -*- coding: cp936 -*-import socket sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#初始化socket sock.bind(("127.0.0.1",8001))#绑定本机地址,8001端口sock.listen(5)#等待客户连接 while True: print "waiting client conne
服务器端代码: # -*- coding: cp936 -*- import socket sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)#初始化socket sock.bind(("127.0.0.1",8001))#绑定本机地址,8001端口 sock.listen(5)#等待客户连接 while True: print "waiting client connection..." connection,address = sock.accept()#接收客户连接请求 print "a client have connected..." while True: try: connection.settimeout(5) #设置超时时间 buf = connection.recv(1024) #接收数据 if buf == "1": connection.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!") except socket.timeout: print "time out" connection.close() print "a client exit..." 客户器端代码: 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": break sock.close() 1.首先开两个IDLE,分别打开服务器端和客户器端代码。 5.再次运行服务器端代码时会出现错误,这时可以通过任务管理器,将其中的pythonw.exe进程结束,重新打开,编译就可以啦! 客户端: 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 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进行分叉和线程处理 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(('',Handler) server.serve_forever() 线程Server: from SocketServer import TCPServer,ThreadingMixIn,StreamRequestHandler class Server(ThreadingMixIn,addr self.wfile.write('Thank you for connecting') server = Server(('',Handler) server.serve_forever() 带有select和pool的异步I/O 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网络框架 https://www.oudahe.com/p/10831/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |