V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
28hua
V2EX  ›  Linux

Python 网络编程基础中的那个广播程序

  •  
  •   28hua · 2014-09-09 21:04:57 +08:00 · 3149 次点击
    这是一个创建于 3834 天前的主题,其中的信息可能已经有所发展或是发生改变。
    按照书中的说法, 如果 client 端 argv[2] 是广播地址,那么每个 server 端都应该收到发送的消息。
    我给 argv[2] 地址 10.20.71.255,这个地址是 ifconfig 得到的,结果却只有一个 server 端收到了消息,Why?
    按书中的另一种方法 "<broadcast>" 作为 argv[2] 结果能够每个 server 端都收到消息。

    #!/usr/bin/env python
    import socket, sys
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
    MAX = 65535
    PORT = 1060
    if 2 <= len(sys.argv) <= 3 and sys.argv[1] == 'server':
    s.bind(('', PORT))
    print('Listening for broadcasts at', s.getsockname())
    while True:
    data, address = s.recvfrom(MAX)
    print('The client at {0} says: {1}'.format(address, data.decode()))
    elif len(sys.argv) == 3 and sys.argv[1] == 'client':
    network = sys.argv[2]
    s.sendto('Broadcast message!'.encode(), (network, PORT))
    else:
    print('usage: udp_broadcast.py server', sys.stderr)
    print('or: udp_broadcast.py client <host>', sys.stderr)
    sys.exit(2)


    小白网络菜鸟,大神轻拍。。
    3 条回复    2014-09-09 22:49:28 +08:00
    izoabr
        1
    izoabr  
       2014-09-09 21:08:48 +08:00
    10.20.71.255这个地址的掩码是多少?
    如果不是255.255.255.0的话,那这个地址就可能是地址号,而不是广播号
    28hua
        2
    28hua  
    OP
       2014-09-09 21:41:12 +08:00
    @izoabr 怪了,又试了下和上次用 "<broadcast>" 一样了

    inet 10.10.16.40 netmask 255.255.240.0 broadcast 10.10.31.255
    izoabr
        3
    izoabr  
       2014-09-09 22:49:28 +08:00
    @28hua 按这个网络配置,10.10.31.255这个才是广播地址呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5350 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 42ms · UTC 08:07 · PVG 16:07 · LAX 01:07 · JFK 04:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.