Socket.erreur: Invalid Argument supplied

Je suis à l'apprentissage de réseaux de programmation et d'essayer de saisir les bases de sockets par le biais de cet exemple.

import socket,sys


s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

MAX = 65535
PORT = 1060

if sys.argv[1:] == ['server']:
    s.bind(('127.0.0.1',PORT))
    print 'Listening at ' , s.getsockname()
    while True:
        data,address = s.recvfrom(MAX)
        print ' The address at ' , address , ' says ' , repr(data)
        s.sendto('your data was %d bytes' % len(data),address)

elif  sys.argv[1:] == ['client']:
    print ' Address before sending ' ,s.getsockname()
    s.sendto('This is the message',('127.0.0.1',PORT))
    print ' Address after sending ' ,s.getsockname()
    data,address = s.recvfrom(MAX)
    print ' The server at ' , address , ' says ' , repr(data)

else:
    print >> sys.stderr, 'usage: udp_local.py server | client '

Cependant,son lancer une exception dire les arguments donnés par getsockname() n'étaient pas valides spécifiquement sur la ligne 22.Le code est correct, autant que je sache.Voici l'exception

Traceback (most recent call last):
  File "udp_local.py", line 23, in <module>
    print ' Address before sending ' ,s.getsockname()
  File "c:\Python27\lib\socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
error: [Errno 10022] An invalid argument was supplied

À l'aide de PyScripter 2.5.3.0 x86

Est que winsock?
Une prise ne sera probablement pas en fait une adresse avant de l'envoyer, à moins que vous appelez bind sur elle d'abord. Sur Mac, je n'ai pas d'erreur, mais le retour de port est 0 (ce qui signifie qu'il n'a pas été attribué un port encore).
Je suis à l'aide de Python.La prise standard module
Quelle plate-forme êtes-vous? Je n'ai pas cette erreur sur python2.7 OSX 10.8
OK j'ai commenté le "avant l'envoi" getsockname() code et s'avère, vous avez raison, le support ne sera pas réellement une adresse .

OriginalL'auteur devsaw | 2013-03-26