UDP Communication
Sending
Here's simple code to post a note by UDP in Python:
1 import socket
2
3 UDP_IP="127.0.0.1"
4 UDP_PORT=5005
5 MESSAGE="Hello, World!"
6
7 print "UDP target IP:", UDP_IP
8 print "UDP target port:", UDP_PORT
9 print "message:", MESSAGE
10
11 sock = socket.socket( socket.AF_INET, # Internet
12 socket.SOCK_DGRAM ) # UDP
13 sock.sendto( MESSAGE, (UDP_IP, UDP_PORT) )
Receiving
Here's simple code to receive UDP messages in Python:
1 import socket
2
3 UDP_IP="127.0.0.1"
4 UDP_PORT=5005
5
6 sock = socket.socket( socket.AF_INET, # Internet
7 socket.SOCK_DGRAM ) # UDP
8 sock.bind( (UDP_IP,UDP_PORT) )
9
10 while True:
11 data, addr = sock.recvfrom( 1024 ) # buffer size is 1024 bytes
12 print "received message:", data
Discussion
* It would seem easy to extend this to a simple means to open a file on the sender side, send datagrams to the receiver side, and write those packets to a file there - I just wonder about synchronisation issues regarding the buffer...Anyone smart care to put something down, say as a simple practical extension of what is already here? (And if you do it pls delete this message) *
Multicasting?
I've been googling for some time now, and still have yet to find a working example of Python multicast listening.
Here's my own, non-functioning, effort:
1 import socket
2 import struct
3
4 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
5 #sock.bind(('127.0.0.1', 1000))
6 sock.bind(('', 1000))
7 grpaddr = 0
8 for byte in "239.192.0.100".split("."):
9 grpaddr = (grpaddr << 8) | int(byte)
10 mreq = struct.pack('ll', socket.htonl(grpaddr),
11 socket.htonl(socket.INADDR_ANY))
12 sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
13 print sock.recvfrom(100)
The mreq packing is based on [http://www.senux.com/linux/network/multicast/ some code that I found,] that does not work. On my computer, at least.
Sending to multicast groups is just fine; Here's some functional text:
At this point, I'm beginning to think: "Python multicast simply does not work."
It's too bad we don't have anything as simple as this:
1 import UDP
2
3 sock = UDP.MulticastListener("239.192.0.100", 1000) # Listen on port 1000
4 print sock.recv(100)
1 import UDP
2
3 UDP.send("Hello, world!", "239.192.0.100", 1000)
...or something like that.