xxglsvr.py
#-*- coding:utf-8 -*-
from socketserver import threadingtcpserver, tcpserver, baserequesthandler
import traceback
class mybaserequesthandler(baserequesthandler):
def handle(self):
#迴圈監聽(讀取)來自客戶端的資料
while true:
try:
#一次讀取1024位元組,並去除兩端的空白字元(包括空格,tab,\r,\n)
data = self.request.recv(1024).strip()
data = data.decode()
if data == '':
break
#self.client_address是客戶端的連線(host, port)的元組
print("receive from %r: [%r]" % (self.client_address, data))
ret = self.exec_sub(data, data)
self.request.sendall(ret.encode())
except:
#traceback.print_exc() #當客戶端主動斷開連線時,self.recv(1024)會丟擲異常
break
#根據報文名稱呼叫對應的模組,並傳遞引數,將執行結果返回給客戶端
def exec_sub(self, procname, params):
try:
loc = locals()
exec("from %s import call_sub" % procname)
call_sub = loc['call_sub']
result = call_sub(params)
return result
except exception as e:
print(str(e))
return "error"
if __name__ == "__main__":
host = "" #主機名,可以是ip,像localhost的主機名,或""
port = 9999 #埠
addr = (host, port)
#server = tcpserver(addr, mybaserequesthandler)
server = threadingtcpserver(addr, mybaserequesthandler)
server.serve_forever()
xxglsvr01.py
import sys
def call_sub(params):
return "call xxglsvr01(%s)" % params
xxglsvr02.py
import sys
def call_sub(params):
return "call xxglsvr02(%s)" % params
client1.py
import socket # 匯入 socket 模組
def main():
tcpclientsocket= socket.socket() # 建立 socket 物件
host = socket.gethostname() # 獲取本地主機名
port = 9999 # 設定埠好
tcpclientsocket.connect((host, port))
#該函式返回接收到的資料,資料均以位元組表示,引數bufsize表示一次收到的最大的位元組數
#使用這個方法好處是如果訊號處理器未收到異常或系統請求中斷,會重新嘗試使系統重新請求而不是直接報錯
data = "xxglsvr01"
tcpclientsocket.sendall(data.encode())
data = tcpclientsocket.recv(1024).strip()
print(data.decode())
tcpclientsocket.close()
if __name__ == "__main__":
main()
python3使用importlib來重複載入模組
coding utf 8 from socketserver import threadingtcpserver,baserequesthandler import importlib import traceback import time import logging logging.basic...
python3使用 python3使用模組
python內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def tes...
python3中的eval和exec的區別與聯絡
看了很多網上的方法,寫入檔案後開啟檔案看確實不再是亂碼,但是從檔案中讀入json時發現了亂碼,可能是讀檔案預設的編碼格式不對。下面讀寫方法可行。注意,ensure ascii false可以保證不會以ascii格式編碼,保證中文的正常轉換 import js程式設計客棧on with open te...