socket 广播

本文介绍了UDP协议中两种广播方式——受限广播和直接广播的使用。受限广播地址255.255.255.255需要绑定特定网卡发送,而直接广播地址如192.168.100.255则不需要。在局域网环境下,PC1无法通过直接广播发现PC2,但能通过受限广播实现。示例代码展示了如何在C/S架构中设置和发送广播包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

socket 广播方式 分为两种
1.受限广播地址 即255.255.255.255
2.直接广播地址 如 192.168.100.255

使用受限广播时,UPD 方式需要绑定具体网卡才可以发送广播通信

	SOCKET  sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
	if ((sockfd) < 0)
	{
		return -1;
	}
	char broadcast = 1;
	int id = setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char*)&broadcast, sizeof(broadcast));
	if (id < 0)
	{
		closesocket(sockfd);
		return -1;
	}

	struct sockaddr_in hostAddr = { 0 };
	hostAddr.sin_family = AF_INET;
	hostAddr.sin_addr.s_addr = inet_addr("192.168.100.175");
	hostAddr.sin_port = htons(31456);
	bind(sockfd, (struct sockaddr *)&hostAddr, sizeof(hostAddr));

使用直接广播地址时 则不需要绑定网卡地址

		struct sockaddr_in targetaddr = { 0 };
		targetaddr.sin_family = AF_INET;
		targetaddr.sin_addr.s_addr = inet_addr("192.168.100.255");
		//targetaddr.sin_addr.s_addr = INADDR_BROADCAST;
		targetaddr.sin_port = htons(21845);

		int yy = sendto(sockfd, (char*)cmd, 6, 0, (struct sockaddr *)&targetaddr, sizeof(targetaddr));

值得说明的是,局域网中 PC1 地址192.168.100.100 ,PC2地址192.168.1.100
则pc1 无法ping 通pc2,此时无法使用 直接广播发现pc2,但是可以使用受限广播发现PC2.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值