IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> UDP广播 -> 正文阅读

[网络协议]UDP广播

服务端

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WS2tcpip.h>
#include <WinSock2.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")

int main()
{
	WSADATA wsaData = {0};
	WSAStartup(MAKEWORD(2, 2), &wsaData);
	SOCKET serverSocket = socket(AF_INET, SOCK_DGRAM, 0);
	//设置套接字可以发送广播消息权限
	bool optval = true;
	setsockopt(serverSocket, SOL_SOCKET, SO_BROADCAST, (char*)&optval, sizeof(optval));		
	//SOCKADDR_IN serverSockAddr_in = { 0 };
	//serverSockAddr_in.sin_family = AF_INET;
	//serverSockAddr_in.sin_addr.S_un.S_addr = INADDR_ANY;
	//serverSockAddr_in.sin_port = htons(6666);
	//setsockopt(serverSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&optval, sizeof(optval));
	//bind(serverSocket, (SOCKADDR*)&serverSockAddr_in, sizeof(serverSockAddr_in));				//不需要接收消息就不需要绑定了

	//要发送的广播地址
	SOCKADDR_IN broadcastSockAddr_in = { 0 };
	broadcastSockAddr_in.sin_family = AF_INET;
	broadcastSockAddr_in.sin_addr.S_un.S_addr = INADDR_BROADCAST; // inet_addr("172.16.20.255");	本地广播地址/直接广播地址
	broadcastSockAddr_in.sin_port = htons(6666);
	

	while (true)
	{
		cout << "输入内容:";
		char sendStr[100] = { 0 };
		cin >> sendStr;
		sendto(serverSocket, sendStr, sizeof(sendStr) - 1, 0, (SOCKADDR*)&broadcastSockAddr_in, sizeof(broadcastSockAddr_in));
		//也可以自己发自己收(广播程序正常为服务端只负责发,客户端只负责收)
		//char recvStr[100] = { 0 };
		//recvfrom(serverSocket, recvStr, sizeof(recvStr)-1, 0,0,0);
		//cout << "收到消息:" << recvStr << endl;
		
	}
	return 0;
}

客户端

#define _WINSOCK_DEPRECATED_NO_WARNINGS
#include <WS2tcpip.h>
#include <WinSock2.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib")

int main()
{
	WSADATA wsaData = { 0 };
	WSAStartup(MAKEWORD(2, 2), &wsaData);
	SOCKET clientSocket = socket(AF_INET, SOCK_DGRAM, 0);
	SOCKADDR_IN clientSockAddr_in = { 0 };
	clientSockAddr_in.sin_family = AF_INET;
	clientSockAddr_in.sin_addr.S_un.S_addr =  INADDR_ANY;
	clientSockAddr_in.sin_port = htons(6666);
	bool optval = true;
	setsockopt(clientSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&optval, sizeof(optval));				//设置端口重用(非必要)
	int bindRet = bind(clientSocket, (SOCKADDR*)&clientSockAddr_in, sizeof(clientSockAddr_in));	//显式绑定套接字用于消息
	if (bindRet == SOCKET_ERROR)
	{
		cout << "绑定套接字失败\n";
		closesocket(clientSocket);
		WSACleanup();
		system("pause");
		return 0;
	}
	while (true)
	{
		char recvStr[100] = { 0 };
		SOCKADDR_IN fromSockAddr_in = { 0 };
		int len = sizeof(fromSockAddr_in);
		recvfrom(clientSocket, recvStr, sizeof(recvStr) - 1, 0, (SOCKADDR*)&fromSockAddr_in, &len);
		std::cout << "(" << inet_ntoa(fromSockAddr_in.sin_addr) << ":" << ntohs(fromSockAddr_in.sin_port) << "):" << recvStr << std::endl;
	}
	return 0;
}

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-12-02 17:07:55  更:2021-12-02 17:09:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年7日历 -2024/7/6 6:44:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码