PodSixNet模塊_2

PodSixNet模塊_2

來自專欄我學python

寫代碼其實就是一種技藝,它跟打鐵、木匠這些手工藝人都是一樣的,就是要不停地實踐,知道的再多不去實踐還是一個外行,實踐的多了,就能從做小東西,做大東西,做自己喜歡的東西了。

今天再來練習一下使用PodSixNet,寫個簡單的文字聊天效果。

效果是開啟兩個client終端,一個server終端,兩個client通過server通信

excisePod_client.py

class MyNetworkListener(ConnectionListener): def __init__(self, host, port): self.Connect((host, port)) #1 print(please input your name!) connection.Send({action: name, aname: stdin.readline().rstrip("
")}) #2 t = start_new_thread(self.InputLoop, ()) def InputLoop(self): while True: connection.Send({action: "message", "message": stdin.readline().rstrip("
")}) def Network_connected(self, data): print("connected to the server") def Network_error(self, data): print("error:", data[error][1]) def Network_disconnected(self, data): print("disconnected from the server") def Network_message(self, data): print(data[name] + ": " + data[message] )gui = MyNetworkListener(localhost, 3425)while 1: connection.Pump() gui.Pump()

大的框架和之前的client.py是一致的

主要解決的問題:

  1. 在哪裡 給server發送自己的名字
  2. 在哪裡 發送數據

#1 第1個問題 在初化化對象實例時,輸入並發送name

#2 第2個問題 建立一個新的線程,等待隨時輸入

注意引入模塊

from _thread import *import sysfrom sys import stdin

excisePod_server.py

class ClientChannel(Channel): def __init__(self, *args, **kwargs): Channel.__init__(self, *args, **kwargs) #1 self.nickname = unnamed #2 def Network_message(self, data): print(data[message]) self._server.SendAll({action: "message", "message":data[message], name:self.nickname})class MyServer(Server): channelClass = ClientChannel def __init__(self, *args, **kwargs): Server.__init__(self, *args, **kwargs) #3 self.players = WeakKeyDictionary() print(Server launched) def Connected(self, channel, addr): print(new connection:, str(channel)) #4 self.players[channel]=True #5 def SendAll(self, data): for p in self.players: p.Send(data)myserver = MyServer(localaddr=("127.0.0.1", 3425))while True: myserver.Pump() sleep(0.0001)

#1 初始化channel時為每人客戶端設置存儲用戶用的變數nickname

#2 收到client發送來的數據時使用server類中的函數發送數據到其它所有client中

Myserver類中

#3 初始化伺服器時為其加入一個字典players,用來存儲每個clientchannel

#4 當客戶端與伺服器連接時,字典players存儲channel

#5 伺服器里,每個channel發送data數據給相對應的client

推薦閱讀:

19位35歲以下的AI領域創新者,他們將改變世界對科技的看法
英飛凌無線充電解決方案——集成專用微控制器、MOSFET、驅動器和IP軟體
智能系統/演算法◇專利精選②
秦吞六國的1500年前,原汁原味的一幕就在西亞上演過……
【裝機幫扶站】第155期:TDP科普之i5-8500的功耗是65W嗎?

TAG:計算機視覺 | 科技 |