2013-03-26 35 views
8

Tôi đang học lập trình mạng và cố gắng nắm bắt cơ bản về các ổ cắm thông qua ví dụ này.Socket.error: Đối số không hợp lệ được cung cấp

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 ' 

Tuy nhiên, ném nó lên một ngoại lệ nói những lập luận do getsockname() là không hợp lệ đặc biệt trên dòng 22.The code đang đúng như xa như tôi know.Here là ngoại lệ

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 

Sử dụng PyScripter 2.5.3.0 x86

+0

là winsock đó? – wRAR

+0

Một ổ cắm có thể không thực sự * có * một địa chỉ trước khi gửi, trừ khi bạn gọi 'bind' trên nó trước tiên. Trên máy Mac, tôi không gặp lỗi nhưng cổng được trả về là '0' (nghĩa là nó chưa được gán cổng). – robertklep

+0

Tôi đang sử dụng Python. Mô-đun ổ cắm tiêu chuẩn – devsaw

Trả lời

8

Tôi gặp vấn đề.Các ổ cắm không có địa chỉ cho đến khi nó được kết nối hoặc dữ liệu được gửi đi. Chỉ cần bình luận.

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

Cảm ơn

+1

Bạn nên thêm liên kết và chấp nhận câu trả lời của mình –

Các vấn đề liên quan