8

私はネットワークプログラミングを学び、この例を通してソケットの基本を理解しようとしています。

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 '

ただし、getsockname()によって指定された引数が22行目で特に無効であるという例外がスローされます。私が知る限り、コードは正しいです。これが例外です。

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

PyScripter2.5.3.0x86の使用

4

1 に答える 1

9

問題が発生しました。バインドされるかデータが送信されるまで、ソケットにはアドレスがありません。コメントアウトする必要がありました。

elif  sys.argv[1:] == ['client']:
 ## print ' Address before sending ' ,s.getsockname()

ありがとう

于 2013-03-26T19:35:50.723 に答える