2014-04-19 63 views
0

好吧,所以我似乎无法获得一个UDP端口绑定到任何接口,我试过wlan0/eth0 /'0.0.0.0'/ localhost等,当使用wlan0作为我的界面我没有错误,但当我运行netstat - 没有任何东西在港口列出。这应该很简单,对吧?无法获取UDP端口绑定到任何接口,我在哪里出错?

def bind_udp_socket(): 
    if args.p < 1024 and os.getuid() != 0: 
      print 'Cannot bind to privileged ports, run as root' 
      exit(1) 
    if args.v: print 'Binding to %s on UDP port %d' % (interface, args.p) 
    try: 
      s = socket.socket(socket.AF_PACKET, socket.SOCK_DGRAM) 
    except socket.error, err: 
      print 'failed to create socket:', err 
      return 1 
    try: 
      #print type(interface) # debug 
      s.bind((interface, args.p)) 
    except socket.error, err: 
      print 'failed to bind to socket:', err 
      return 1 

    if args.v: print 'Socket bind complete' 
    print 'Receiving data...\n' 
    while True: 
      data, addr = s.recvfrom(65535) # buffer size is 64 kilobytes 
      if args.v: print data 
    return 0 

args.p是int类型顺便说一句 我跑不同的服务器(不同的OS)和同样的问题上的代码。

+0

即时通讯不使用Windows。 netstat -unl对于linux系统来说是正确的,以显示所有监听的udp端口。 – tozhan

+1

当你发现异常并打印它时,你会得到什么错误?只是为了澄清;您确定要绑定数据包套接字(AF_PACKET)(http://man7.org/linux/man-pages/man7/packet.7.html)。大多数时候地址系列应该是IPv4(socket.AF_INET)。至于接口尝试s.bind((“”,UDP_PORT)),“”绑定到接收端的所有本地接口。希望有所帮助。 –

+1

ahh是的,它应该是AF_INET。谢谢! – tozhan

回答

1

您的地址系列应该是IPv4(socket.AF_INET)。作为接口,

s.bind(("",UDP_PORT))

结合在接收侧所有的本地接口。

相关问题