動作確認
CentOS 6.5
上記の設計の元、UDP通信による設定のset/get処理を実装中。
設定のクラス
utilSetting.py
class CSetting:
def __init__(self):
self.monip = "192.168.10.8"
self.monport = 9000
self.comdelay = 0 # [msec]
def getMonip(self):
return self.monip
def setMonip(self,monip_):
self.monip = monip_
return
def getMonport(self):
return self.monport
def setMonport(self,monport_):
self.monport = monport_
return
def getComdelay(self):
return self.comdelay
def setComdelay(self, comdelay_):
self.comdelay = comdelay_
return
UDP通信の実装
utilUdpCmd.py
import time
import socket
from utilSetting import CSetting
g_setting = CSetting()
# TODO: error handling > cmd typo etc
'''
v0.1 2015/11/13
- can get/set settings (monitor ip, monitor port, com delay[msec])
'''
def procSetCommand(rcvstr):
cmds = rcvstr.split(",")
if "mon" in cmds[1]:
count = len(cmds)
if count == 4:
g_setting.setMonip(cmds[2])
g_setting.setMonport(cmds[3])
print "set monitor (ip, port)"
print g_setting.getMonip()
print g_setting.getMonport()
if "comdelay" in cmds[1]:
g_setting.setComdelay(int(cmds[2]))
print "set comdelay"
print g_setting.getComdelay()
def procGetCommand(rcvstr):
cmds = rcvstr.split(",")
count = len(cmds)
if count == 2:
if "monip" in cmds[1]:
print "monip," + g_setting.getMonip()
if "monport" in cmds[1]:
print "monport," + `g_setting.getMonport()`
if "comdelay" in cmds[1]:
print "comdelay," + `g_setting.getComdelay()`
return
def procCommand(rcvstr):
rcvstr = rcvstr.rstrip('\n')
rcvstr = rcvstr.rstrip('\r')
print "rcvd:[", rcvstr, "]"
cmds = rcvstr.split(",")
if "set" in cmds[0]:
procSetCommand(rcvstr)
if "get" in cmds[0]:
procGetCommand(rcvstr)
return
def recvCommand(cmdsock, rcvcmd):
try:
data,address = cmdsock.recvfrom(100)
except socket.error:
pass
else:
rcvcmd = rcvcmd + data
return rcvcmd, True
return rcvcmd, False
def main():
cmdip = ""
cmdport = 7000
cmdsock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
cmdsock.bind((cmdip, cmdport))
cmdsock.setblocking(0)
rcvcmd = ""
while 1:
rcvcmd,rcvd = recvCommand(cmdsock, rcvcmd)
if rcvd == True and "\n" in rcvcmd:
procCommand(rcvcmd)
rcvcmd = ""
if __name__ == '__main__':
main()
実行
動作確認
プログラム実行: CentOS 6.5 (IP: 192.168.10.8)
UDPコマンド送信: Mac OS X 10.8.5
プログラム実行は以下で行う。
$ python utilUdpCmd.py
モニターIP,port設定
MacOSXのターミナルで以下を実行。
$ echo "set,mon,192.168.10.5,8000" | nc -w 1 -u 192.168.10.8 7000
すると、CentOSでは以下となる。
[python-151113-lineMonitor]$ python utilUdpCmd.py
rcvd:[ set,mon,192.168.10.5,8000 ]
set monitor (ip, port)
192.168.10.5
8000
COM通信ディレイ設定
MacOSXのターミナルで以下を実行。
$ echo "set,comdelay,300" | nc -w 1 -u 192.168.10.8 7000
すると、CentOSでは以下となる。
[python-151113-lineMonitor]$ python utilUdpCmd.py
rcvd:[ set,comdelay,300 ]
set comdelay
300
設定取得
MacOSXで以下を実行すると、それぞれの設定が取得できる。
$ echo "get,comdelay" | nc -w 1 -u 192.168.10.8 7000
$ echo "get,monip" | nc -w 1 -u 192.168.10.8 7000
$ echo "get,monport" | nc -w 1 -u 192.168.10.8 7000
上記で設定が変更できるようにはなった。
pythonはまだよく分からない点が色々あり、現状の実装が最適とは思えないが、とりあえず自分のやりたいことを実装してからリファクタリングするかもしれない。