windows 下 c++ socket udp 广播
来源:互联网 发布:社交网络的发展现状 编辑:程序博客网 时间:2024/06/18 04:30
接收广播消息端:
- #include "stdafx.h"
- #include <iostream>
- #include <WinSock2.h>
- #pragma comment(lib, "ws2_32.lib")
- const int MAX_BUF_LEN = 255;
- using namespace std;
- int _tmain(int argc, _TCHAR* argv[])
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
- wVersionRequested = MAKEWORD(2, 2);
- err = WSAStartup(wVersionRequested, &wsaData);
- if(err != 0)
- {
- return -1;
- }
- if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2)
- {
- WSACleanup();
- return -1;
- }
- SOCKET clientSock = socket(AF_INET, SOCK_DGRAM, 0);
- if (INVALID_SOCKET == clientSock)
- {
- err = WSAGetLastError();
- printf("socket error:%d\n", err);
- WSACleanup();
- return -1;
- }
- //创建本地地址信息并绑定
- SOCKADDR_IN sin;
- sin.sin_family = AF_INET;
- sin.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
- sin.sin_port = htons(7001);
- if (bind(clientSock, (SOCKADDR*)&sin, sizeof(sin)) != 0)
- {
- err = WSAGetLastError();
- printf("bind error:%d\n", err);
- closesocket(clientSock);
- WSACleanup();
- return -1;
- }
- SOCKADDR_IN clientAddr;
- int addrLen = sizeof(clientAddr);
- int nSize;
- char recvBuff[1024];
- memset(recvBuff, 0, 1024);
- while(1){
- nSize = recvfrom(clientSock, recvBuff, 1024, 0, (SOCKADDR*)&clientAddr,&addrLen);
- if ( nSize == SOCKET_ERROR)
- {
- err = WSAGetLastError();
- printf("recv error:%d\n", err);
- break;
- }
- recvBuff[nSize] = '\0';
- printf("%s\n", recvBuff);
- }
- closesocket(clientSock);
- WSACleanup();
- return 0;
- }
发送广播消息端:
- #include "stdafx.h"
- #include <iostream>
- #include <stdio.h>
- #include <WinSock2.h>
- #pragma comment(lib, "ws2_32.lib")
- using namespace std;
- const int MAX_BUF_LEN = 255;
- int _tmain(int argc, _TCHAR* argv[])
- {
- WORD wVersionRequested;
- WSADATA wasData;//指向WinSocket信息结构的指针
- int err;
- wVersionRequested = MAKEWORD(2, 2);
- // 初始化winsock库,使用socket的前提
- err = WSAStartup(wVersionRequested, &wasData);
- if (err != 0)
- {
- return -1;
- }
- if (LOBYTE(wasData.wVersion) != 2 || HIBYTE(wasData.wVersion) != 2)
- {
- WSACleanup();
- return -1;
- }
- SOCKET conn_sock = socket(AF_INET, SOCK_DGRAM, 0);
- if (conn_sock == INVALID_SOCKET)
- {
- err = WSAGetLastError();
- printf("socket error:%d\n", err);
- closesocket(conn_sock);
- WSACleanup();
- return -1;
- }
- bool bOpt = true;
- //打开广播选项
- setsockopt(conn_sock, SOL_SOCKET, SO_BROADCAST, (char*)&bOpt, sizeof(bOpt));
- // 设置发往的地址
- SOCKADDR_IN saUdpServ;
- memset(&saUdpServ, 0, sizeof(saUdpServ));
- saUdpServ.sin_family = AF_INET;
- saUdpServ.sin_addr.S_un.S_addr = htonl(INADDR_BROADCAST);
- saUdpServ.sin_port = htons(7001);
- int nSize = sizeof(SOCKADDR_IN);
- char buff[MAX_BUF_LEN];
- memset(buff, 0, MAX_BUF_LEN);
- int nLoop = 0;
- char* ip = NULL;
- while(1){
- nLoop++;
- sprintf(buff, "Message %d", nLoop);
- int nSendSize = sendto(conn_sock, buff, strlen(buff), 0, (SOCKADDR*)&saUdpServ, nSize);
- if (nSendSize == SOCKET_ERROR)
- {
- err = WSAGetLastError();
- printf("sendto error:%d\n", err);
- closesocket(conn_sock);
- WSACleanup();
- return -1;
- }
- printf("send: %s\n", buff);
- Sleep(5000);
- }
- closesocket(conn_sock);
- WSACleanup();
- return 0;
- }
阅读全文
1 0
- windows 下 c++ socket udp 广播
- windows 下 c++ socket udp 广播
- windows下C调用socket实现TCP和UDP通信
- Socket 实现UDP广播
- iOS socket udp 广播
- UDP广播socket实现
- C语言socket UDP广播的发送和接收示例
- C语言socket编程---udp通信及广播
- UDP windows下socket编程实例
- windows下socket开发udp程序
- UDP windows下socket编程实例
- Windows系统下C++ Socket UDP编程
- Socket API实现UDP广播
- c#和UDP SOCKET广播
- c#和UDP SOCKET广播
- Socket API实现UDP广播
- c#和UDP SOCKET广播
- SOCKET 编程 UDP 广播【学习】
- java把大数据类型的包装类
- 移动硬盘数据丢失如何恢复
- POJ3122 Pie(二分)
- 【Unity学习笔记】——基础篇:Camera天空盒
- iOS 地图 自定义以及添加锚点
- windows 下 c++ socket udp 广播
- python学习日志--day7
- [BZOJ 2957] 楼房重建 线段树/分块(两种做法)
- HTML5--表单新特性使用自定义错误提示消息validity属性
- 51Nod-1134 最长递增子序列
- sublime 格式化 vue 代码
- Android------自定义View圆形进度条2
- 数据库常见死锁原因及处理
- [转] Java的native方法