プログラム間通信をするための勉強メモ.

TCP/IP による1対1通信ではなく,UDP で Broadcast メッセージを投げて1対多通信を行う.
Client 側は Broadcast(同一ネットワーク上のすべてのマシン)に対してメッセージを投げる.
Server 側は待ち構えていて,誰にということもなく投げられたメッセージが届けばそれを受信する.

=== Server === === Client ===
from socket import *
import sys

HOST = ''
PORT = 5008

s =socket(AF_INET,SOCK_DGRAM)
s.bind((HOST, PORT))

while True:
msg, address = s.recvfrom(8192)
if msg == ".":
print "Sender is closed"
break

print "message:", msg, "from", address

s.close()
sys.exit()
 
from socket import *
import sys

HOST = ''
PORT = 5008
ADDRESS = "192.168.50.255"

s =socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
s.bind((HOST, PORT))

while True:
msg = raw_input("> ")
s.sendto(msg, (ADDRESS, PORT))
if msg == ".":
break

s.close()
sys.exit()


上記 client と sever をそれぞれ同一ネットワーク上に存在する2台のマシン(計4台)で実行してみる.
実行結果は以下のようになる.


=== Server1 === === Client1 ===
montepulciano[97]python udp_server.py
message: Hello, who are you? from ('192.168.50.11', 5008)
message: Hi, where are you? from ('192.168.50.10', 5008)
Sender is closed


 
barbaresco[357]python udp_client.py
> Hello, who are you?
> .
=== Server2 === === Client2 ===
soave[132]python udp_server.py
message: Hello, who are you? from ('192.168.50.11', 5008)
message: Hi, where are you? from ('192.168.50.10', 5008)
Sender is closed
 
barolo[867]python udp_client.py
> Hi, where are you?
>


Client の2台が別個に who are you? と where are you? をブロードキャストに投げると,Server の2台が同時に両 Client からのメッセージを受け取っていることがわかる.




やじるし プログラム間通信関連メモの目次