Sending short text messages with socket datagrams is simple to implement and provides a very lightweight message passing idiom.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# server.py import socket port = 8081 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(("", port)) print "waiting on port:", port while 1: data, addr = s.recvfrom(1024) print data --- # client.py import socket port = 8081 host = "localhost" s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(("", 0)) s.sendto("Holy Guido! It's working.", (host, port))
Socket datagrams should not be used where reliable delivery of data must be guaranteed. If the server isn't available, your message is lost. However, there are many situations where: (1) you don't care whether the message gets lost; or (2) you don't want to abort a program just because the message can't be delivered.
Don't use the above code to send large datagram messages, especially under Windows -- which apparently doesn't respect the buffer limit. To send larger messages, you will probably want to do something like this:
BUFSIZE = 1024 while msg: s.sendto(msg[:BUFSIZE], (host, port)) msg = msg[BUFSIZE:]
I often use socket datagrams for debugging, especially where the application spans more than one machine.