進擊のpython
番外:socketserver使用
是不是被一般寫法,多進程寫法,多線程寫法甚至是協程寫法搞的不可開交
雲里霧里,仿佛將要放棄~再配上服務器要服務多個客戶端
完蛋了,全都亂了~那今天就給你推薦一個好的模塊!sockerserver
具體操作:
import socketserver #1、引入模塊
class MyServer(socketserver.BaseRequestHandler): #2、自己寫一個類,類名自己隨便定義,然后繼承socketserver這個模塊里面的BaseRequestHandler這個類
def handle(self): #3、寫一個handle方法,必須叫這個名字
#self.request #6、self.request 相當於一個conn
self.request.recv(1024) #7、收消息
msg = '親,學會了嗎'
self.request.send(bytes(msg,encoding='utf-8')) #8、發消息
self.request.close() #9、關閉連接
pass
if __name__ == '__mian__':
server = socketserver.ThreadingTCPServer(('127.0.0.1',8090),MyServer)#4、使用socketserver的ThreadingTCPServer這個類,將IP和端口的元祖傳進去,還需要將上面咱們自己定義的類傳進去,得到一個對象,相當於我們通過它進行了bind、listen
server.serve_forever() #5、使用我們上面這個類的對象來執行serve_forever()方法,他的作用就是說,我的服務一直開啟着,就像京東一樣,不能關閉網站,對吧,並且serve_forever()幫我們進行了accept
#注意:
#有socketserver 那么有socketclient的嗎?
#當然不會有,我要作為客戶去訪問京東的時候,京東幫我也客戶端了嗎,客戶端是不是在我們自己的電腦啊,並且socketserver對客戶端沒有太高的要求,只需要自己寫一些socket就行了。
把注釋去掉:
import socketserver
class MyServer(socketserver.BaseRequestHandler):
def handle(self):
# self.request
self.request.recv(1024)
msg = '親,學會了嗎'
self.request.send(bytes(msg, encoding='utf-8'))
self.request.close()
pass
if __name__ == '__mian__':
server = socketserver.ThreadingTCPServer(('127.0.0.1', 8090), MyServer)
是不是超級簡單!!!!!!!!!
這是服務端對吧,客戶端很好寫,就正常寫
到此!socket通信才算是真正的學習完了!