python 網(wǎng)絡(luò)編程常用代碼段
服務(wù)器端代碼:
# -*- coding: cp936 -*- import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)#初始化socket sock.bind(("127.0.0.1", 8001))#綁定本機(jī)地址,8001端口 sock.listen(5)#等待客戶(hù)連接 while True: print "waiting client connection..." connection,address = sock.accept()#接收客戶(hù)連接請(qǐng)求 print "a client have connected..." while True: try: connection.settimeout(5) #設(shè)置超時(shí)時(shí)間 buf = connection.recv(1024) #接收數(shù)據(jù) 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..."
客戶(hù)器端代碼:
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.首先開(kāi)兩個(gè)IDLE,分別打開(kāi)服務(wù)器端和客戶(hù)器端代碼。
2.F5運(yùn)行服務(wù)器端代碼,會(huì)出現(xiàn)waiting client connection...
3.F5運(yùn)行客戶(hù)端代碼,會(huì)出現(xiàn)input command: ;
4.這時(shí)服務(wù)器和客戶(hù)端就連接上了,可以正常的通信啦,如圖:
5.再次運(yùn)行服務(wù)器端代碼時(shí)會(huì)出現(xiàn)錯(cuò)誤,這時(shí)可以通過(guò)任務(wù)管理器,將其中的pythonw.exe進(jìn)程結(jié)束,重新打開(kāi),編譯就可以啦!
客戶(hù)端:
import socket s=socket.socket() host = socket.gethostname() port = 1234 s.connect((host, port)) print s.recv(1024)
服務(wù)端:
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')
加上正規(guī)表達(dá)式
import re text = webpage.read() m = re.search('<a href="([^"]+)" .*?>about</a>', text, re.IGNORECASE) m.group(1)
urllib
urllib2
一個(gè)基于SocketServer的小型服務(wù)器例子:
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進(jìn)行分叉和線程處理
分叉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服務(wù):
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服務(wù)器:
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網(wǎng)絡(luò)框架
相關(guān)文章
Python基礎(chǔ) while循環(huán)與break、continue關(guān)鍵字
今天再帶著大家講述一下while循環(huán)。那么for循環(huán)和while循環(huán),到底有什么區(qū)別呢?下面文章就來(lái)詳細(xì)介紹,感興趣的小伙伴可以參考一下2021-10-10python實(shí)現(xiàn)簡(jiǎn)單溫度轉(zhuǎn)換的方法
這篇文章主要介紹了python實(shí)現(xiàn)簡(jiǎn)單溫度轉(zhuǎn)換的方法,涉及Python操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03離線狀態(tài)下在jupyter notebook中使用plotly實(shí)例
這篇文章主要介紹了離線狀態(tài)下在jupyter notebook中使用plotly實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04pycharm運(yùn)行程序時(shí)看不到任何結(jié)果顯示的解決
今天小編就為大家分享一篇pycharm運(yùn)行程序時(shí)看不到任何結(jié)果顯示的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02