Paul Barry wrote:
I'm trying to get one of the examples from Foundation of Python Network Programming to work. Specifically this is the UDP example from Ch 3. First there is the server:#!/usr/bin/env python # UDP Echo Server - Chapter 3 - udpechoserver.py import socket, traceback, time host = '127.0.0.1' # Bind to all interfaces port = 51423 s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind((host, port)) while 1: try: message, address = s.recvfrom(8192) print "Got message '%s' from %s" % (message, address) # Echo it back s.sendto(message, address) print "Sent response to '%s'" % (address,) except (KeyboardInterrupt, SystemExit): raise except: traceback.print_exc() Next I have a client written in Ruby, which works. I am posting thing not to start a Ruby/Python flame war, but to simply prove that the server works and there are no weird networking issues that would prevent the Python client from working. The Ruby code is: #!/usr/bin/env ruby require 'socket' socket = UDPSocket.new socket.connect ARGV[0], ARGV[1] puts "Enter data to transmit: " data = STDIN.gets.chomp socket.send data, 0 puts "Looking for replies; press Ctrl-C or Ctrl-Break to stop." loop do buf = socket.recvfrom(2048) puts buf.first end When I start the server and run that, the output looks like this: $ ch02/udp.rb 127.0.0.1 51423 Enter data to transmit: foobar Looking for replies; press Ctrl-C or Ctrl-Break to stop. foobar Now, when I try the python example: #!/usr/bin/env python # UDP Example - Chapter 2 - udp.py import socket, sys host = sys.argv[1] textport = sys.argv[2] s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: port = int(textport) except ValueError: # That didn't work. Look it up instead. port = socket.getservbyname(textport, 'udp') s.connect((host, port)) print "Enter data to transmit: " data = sys.stdin.readline().strip() s.sendall(data) print "Looking for replies; press Ctrl-C or Ctrl-Break to stop." while 1: buf = s.recvfrom(2048) sys.stdout.write(buf[0]) I don't ever get a response: $ ch02/udp.py 127.0.0.1 51423 Enter data to transmit: foobar Looking for replies; press Ctrl-C or Ctrl-Break to stop. The server sees the message and says it has sent a reply: Got message 'foobar' from ('127.0.0.1', 49623) Sent response to '('127.0.0.1', 49623)' Any ideas as to why this doesn't work?
It works on my PC (Python 2.6.2, Windows XP Pro, service pack 3). -- http://mail.python.org/mailman/listinfo/python-list
