Twisted UDP广播

本文介绍了广播地址的概念,包括直接广播和受限广播地址。示例代码展示了如何利用Python的Twisted库创建一个DatagramProtocol,用于通过192.168.1.255的端口60101广播数据,并监听60102端口进行通信。
摘要由CSDN通过智能技术生成

数据的发送是面向整个子网的,任何一台在子网内的计算机都可以接收到相同的数据;

广播地址

广播地址是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP 协议的网络中,主机号为全1的IP地址为广播地址。例如,对于 :192.168.199.0(掩码:255.255.255.0)网段,其广播地址为192.168.199.255 (255 即为2进制的11111111 ),当发出一个目的地址为192.168.199.255的分组时,它将被分发给该网段上的所有计算机。

直接广播地址:指Host部分全为1的广播地址。如:192.168.199.255。当某机器发出目的地址为直接广播(如:192.168.199.255)时,路由器通过查找路由表可以转发,直到该网段。

受限广播地址:也称本地广播地址,它不被路由发送,但会被送到相同物理网络段上的所有主机,IP地址的网络号和主机号 全为1就是地址255.255.255.255,当某机器发出目的地址为本地广播时,路由器不会转发该包。所以该包只能限制在本网段

下例功能:通过192.168.1.255:60101广播数据,告诉其他节点可以通过60102跟本机通信

# coding:utf8
import sys,threading,time
from datetime import datetime
from twisted.internet.protocol import DatagramProtocol
from twisted.internet  import reactor

class Echo(DatagramProtocol):
    '''
    ConnectedUDP
    '''
    def __init__(self,host:str,port:int):
        '''
        构造函数
        :param host: 目标地址
        :param port: 目标端口
        '''
        self.host = host
        self.port = port

    def startProtocol(self):
        self.transport.connect(self.host,self.port)
        print('Connection Create !')

    def connectionRefused(self):
        print('sent failed !')
        pass

    def stopProtocol(self):
        print('Connection close !')
        pass

    def datagramReceived(self, datagram: bytes, addr):
        print('Got data from :%s' % (addr,))
        print(datagram.decode('utf8'))

host = '192.168.1.255' # 广播地址(交换机、路由器都适用)
# host = '255.255.255.255' #只适用于交换机连接
port = 60101
loacl_port= 60102
protocol = Echo(host,port)

b_stop = False
def routine():
    while not b_stop:
        time.sleep(5)
        str_msg = 'hello , i am %s %s,my port is: %d' % (sys.argv[0], datetime.now(),loacl_port)
        protocol.transport.write(str_msg.encode('utf8'))

threading.Thread(target=routine).start()
reactor.listenUDP(loacl_port,protocol)
reactor.run()
b_stop=True
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值