Shammer's Philosophy

My private adversaria

UDP send client with sticky source port

UDP send client - Shammerismでは、単にデータを送るというだけのクライアントを書いた。しかし、稀に送信ポートを固定したいと思うときがあるので、それを実現するように一行ばかり追加した。サーバーと同じように、bind してやればいい。

import socket
import time
from contextlib import closing

def main():
  host = '192.168.1.101'
  port = 12345
  count = 0
  sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  sock.bind(('192.168.1.3', 8889))
  with closing(sock):
    for i in range(0, 8191):
      message = message + 'X'
    sock.sendto(message, (host, port))
    count += 1
    time.sleep(1)
    data, server = sock.recvfrom(8192)
    print '%s returns %s' % server data
  return

if __name__ == '__main__':
  main()

この例だと、192.168.1.101 に、192.168.1.3 の 8889 ポートを指定して接続する。