34. 34
#!/usr/bin/env python
# coding:utf-8
import socket
host = 'xxx.xxx.xxx.xxx' # 嫌いな人のIPアドレス
port = 2524
serversock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 嫌いなあの人に100通送る
for i in range(1,100):
send_msg = "1:%s:denzow:MyHost:8405280:こんにちは" % i
print 'Send message...[%s]' % send_msg
serversock.sendto(send_msg, (host, port))
投げるだけなら簡単
35. 35
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
サーバ処理の
メインループだけで
これ
36. 36
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
ソケットをselectで
watchして
37. 37
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
パケットがきてたら
パケットをメッセージにして
アクション
38. 38
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
送信キューにメッセージが
あればFIFOで処理
39. 39
while not self.stop_event.is_set():
r, w, e = select.select([self.sock], [self.sock], [], 0)
time.sleep(0.1)
# print((r, w, e))
# recive message
for sk in r:
data, (ip, port) = sk.recvfrom(0x80000)
# parse message
ip_msg = IpmsgMessageParser(ip, port, com.to_unicode(data))
# action for command
self.dispatch_action(ip_msg)
# send message
if w and self.send_que:
# send message loop until que empty.
while self.send_que:
# FIFO
send_msg = self.send_que.popleft()
logger.debug("To[%s:%s]" % (send_msg.addr, send_msg.port))
[logger.debug("t"+x) for x in send_msg.check_flag()]
logger.debug(send_msg.get_full_message())
self.sock.sendto(send_msg.get_full_message(), (send_msg.addr, send_msg.port))
if send_msg.is_sendmsg():
# for check sendmsg success
# if long time in the sended que, the message must be failed.
send_msg.born_time = datetime.datetime.now()
self.sended_que.append(send_msg)
self._cleanup_ques()
投げるだけなら簡単だったのに
送信ミスとかで
キューに長くのこった
メッセージ等のクリーンアップ