2013-03-26 97 views
8

我正在学习网络编程,并尝试通过此示例掌握套接字的基础知识。Socket.error:无效提供的参数

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.The代码是正确的,因为据我know.Here是例外

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 

使用PyScripter 2.5.3.0 x86

+0

那是Winsock的? – wRAR 2013-03-26 13:55:16

+0

一个套接字可能实际上不会在发送之前拥有一个地址,除非您先调用bind。在Mac上,我没有收到错误,但返回的端口是'0'(表示尚未分配端口)。 – robertklep 2013-03-26 14:07:56

+0

我正在使用Python.The标准套接字模块 – devsaw 2013-03-26 14:27:53

回答

8

那么我得到了问题。套接字没有地址,直到其绑定或数据发送。 只是要评论它。

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

感谢

+1

你应该添加一个链接并接受你的答案 – 2014-10-01 13:47:37