windows upd广播包无法发送到局域网解决方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Windows下C++实现UDP收发广播信息的示例代码: 发送端代码: ``` #include <iostream> #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; int main() { // 初始化Winsock WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { cout << "WSAStartup failed: " << iResult << endl; return 1; } // 创建socket SOCKET sendSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sendSocket == INVALID_SOCKET) { cout << "Failed to create socket: " << WSAGetLastError() << endl; WSACleanup(); return 1; } // 设置广播属性 BOOL bOptVal = TRUE; iResult = setsockopt(sendSocket, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, sizeof(BOOL)); if (iResult == SOCKET_ERROR) { cout << "setsockopt failed: " << WSAGetLastError() << endl; closesocket(sendSocket); WSACleanup(); return 1; } // 设置目标地址 SOCKADDR_IN destAddr; destAddr.sin_family = AF_INET; destAddr.sin_port = htons(12345); destAddr.sin_addr.s_addr = INADDR_BROADCAST; // 发送数据 char sendBuf[] = "Hello, this is a broadcast message"; iResult = sendto(sendSocket, sendBuf, strlen(sendBuf), 0, (SOCKADDR*)&destAddr, sizeof(destAddr)); if (iResult == SOCKET_ERROR) { cout << "sendto failed: " << WSAGetLastError() << endl; closesocket(sendSocket); WSACleanup(); return 1; } // 关闭socket closesocket(sendSocket); WSACleanup(); return 0; } ``` 接收端代码: ``` #include <iostream> #include <WinSock2.h> #pragma comment(lib, "ws2_32.lib") using namespace std; int main() { // 初始化Winsock WSADATA wsaData; int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { cout << "WSAStartup failed: " << iResult << endl; return 1; } // 创建socket SOCKET recvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (recvSocket == INVALID_SOCKET) { cout << "Failed to create socket: " << WSAGetLastError() << endl; WSACleanup(); return 1; } // 设置广播属性 BOOL bOptVal = TRUE; iResult = setsockopt(recvSocket, SOL_SOCKET, SO_BROADCAST, (char*)&bOptVal, sizeof(BOOL)); if (iResult == SOCKET_ERROR) { cout << "setsockopt failed: " << WSAGetLastError() << endl; closesocket(recvSocket); WSACleanup(); return 1; } // 设置本地地址 SOCKADDR_IN localAddr; localAddr.sin_family = AF_INET; localAddr.sin_port = htons(12345); localAddr.sin_addr.s_addr = INADDR_ANY; // 绑定socket iResult = bind(recvSocket, (SOCKADDR*)&localAddr, sizeof(localAddr)); if (iResult == SOCKET_ERROR) { cout << "Failed to bind socket: " << WSAGetLastError() << endl; closesocket(recvSocket); WSACleanup(); return 1; } // 接收数据 char recvBuf[1024] = { 0 }; SOCKADDR_IN fromAddr; int fromLen = sizeof(fromAddr); iResult = recvfrom(recvSocket, recvBuf, sizeof(recvBuf), 0, (SOCKADDR*)&fromAddr, &fromLen); if (iResult == SOCKET_ERROR) { cout << "recvfrom failed: " << WSAGetLastError() << endl; closesocket(recvSocket); WSACleanup(); return 1; } // 显示收到的数据 cout << "Received message: " << recvBuf << endl; // 关闭socket closesocket(recvSocket); WSACleanup(); return 0; } ``` 这个示例代码实现了在本地网络中发送广播消息,并在另一台机器上接收。要注意的是,如果有多台机器在同一个局域网下运行这个示例代码,那么它们都会收到这个广播消息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值