不能发送广播包的电脑和可以发送广播报的主机对比,发现不能发送广播报的主机上都有安装虚拟机,也有虚拟网卡,将所有的虚拟网卡关闭,然后再进行测试,都正常了,无论是Win7,Win10还是Xp。

禁用VMware这两个虚拟网卡,然后就一切正常了。

udp广播服务器程序:

// BoardCast_Server.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include <WinSock2.h>
#include <Windows.h>
#pragma comment(lib, "WS2_32.lib") int _tmain(int argc, _TCHAR* argv[])
{
//启动socket api
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA wsaData;
if( 0 != WSAStartup(wVersionRequested, &wsaData))
{
printf("WSAStartup failed with error: %d\n", GetLastError());
return EXIT_FAILURE;
}
if( 2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion))
{
printf("Socket version not supported.\n");
WSACleanup();
return EXIT_FAILURE;
}
SOCKET sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if( INVALID_SOCKET == sockfd)
{
printf("socket failed with error: %d\n", WSAGetLastError());
WSACleanup();
return EXIT_FAILURE;
}
SOCKADDR_IN addr;
memset(&addr, 0, sizeof(addr));
addr.sin_addr.S_un.S_addr = INADDR_BROADCAST;
addr.sin_family = AF_INET;
addr.sin_port = htons(7777);
BOOL bBoardcast = TRUE;
if( SOCKET_ERROR == setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (const char*)&bBoardcast, sizeof(bBoardcast)))
{
printf("setsockopt failed with error: %d\n", WSAGetLastError());
if( INVALID_SOCKET != sockfd)
{
closesocket(sockfd);
sockfd = INVALID_SOCKET;
}
WSACleanup();
return EXIT_FAILURE;
}
printf("Server start to boardcast...\n");
char buf[] = "This message from DESKTOP-879IMIS!";
while(1)
{
if( SOCKET_ERROR == sendto(sockfd, buf, sizeof(buf), 0, (LPSOCKADDR)&addr, sizeof(addr)))
{
printf("sendto failed with error:%d\n", WSAGetLastError());
Sleep(1000);
continue;
}
Sleep(1000);
}
WSACleanup(); return 0;
}

  

udp广播客户端程序:

// BoardCast_Client.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include <WinSock2.h>
#include <Windows.h>
#pragma comment(lib, "WS2_32.lib")
#define MAX_BUFFER 256 int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested = MAKEWORD(2, 2);
WSADATA wsaData;
if(0 != WSAStartup(wVersionRequested, &wsaData))
{
printf("WSAStartup failed with error: %d/n", GetLastError());
return EXIT_FAILURE;
}
if(2 != HIBYTE(wsaData.wVersion) || 2 != LOBYTE(wsaData.wVersion))
{
printf("Socket version not supported./n");
WSACleanup();
return EXIT_FAILURE;
}
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(INVALID_SOCKET == sock)
{
printf("socket failed with error: %d/n", WSAGetLastError());
WSACleanup();
return EXIT_FAILURE;
}
SOCKADDR_IN addr;
memset(&addr, 0, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.S_un.S_addr = INADDR_ANY;
addr.sin_port = htons(7777);
if(SOCKET_ERROR == bind(sock, (LPSOCKADDR)&addr, sizeof(addr)))
{
printf("bind failed with error: %d/n", WSAGetLastError());
if(INVALID_SOCKET != sock)
{
closesocket(sock);
sock = INVALID_SOCKET;
}
WSACleanup();
return EXIT_FAILURE;
} char szBuf[MAX_BUFFER] = {0};
SOCKADDR_IN remote;
memset(&remote, 0, sizeof(remote));
int len = sizeof(remote);
while(1)
{
if(SOCKET_ERROR == recvfrom(sock, szBuf, MAX_BUFFER-1, 0, (LPSOCKADDR)&remote, &len))
{
printf("recvfrom failed with error: %d/n", WSAGetLastError());
continue;
}
printf("recv data: <%s : %d> %s\n", inet_ntoa(remote.sin_addr), ntohs(remote.sin_port), szBuf);
}
return 0;
}

  

windows upd广播包无法发送到局域网解决方法的更多相关文章

  1. Windows与Linux/Mac系统时间不一致的解决方法

    Windows与Linux/Mac系统时间不一致的解决方法 分类: linux2012-02-12 14:25 1691人阅读 评论(1) 收藏 举报 windowsubuntusystemlinux ...

  2. Windows 系统提示“内存不足”的原因及解决方法

         Windows 系统提示“内存不足”的原因及解决方法 windows XP vista 及windows 7系统的电脑有时候会出现系统提示“内存不足”,这是由多方面原因造成的.本文具体分析下 ...

  3. windows 10 删除库后自动恢复的解决方法

    目录 什么是windows 库? 手动删除不行吗? 如何正确的"删除"? title: windows 10 删除库后自动恢复的解决方法 date: 2019-06-09 15:4 ...

  4. Windows中Nginx配置nginx.conf不生效解决方法(路径映射)

    Windows中Nginx配置nginx.conf不生效解决方法 今天在做Nginx项目的时候,要处理一个路径映射问题, location /evaluate/ { proxy_pass http:/ ...

  5. UDP丢包和无序 问题的解决方法

    最近在做一个项目,在这之前,做了个验证程序. 发现客户端连续发来1000个1024字节的包,服务器端出现了丢包现象. 纠其原因,是服务端在还未完全处理掉数据,客户端已经数据发送完毕且关闭了. 我用过s ...

  6. URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致(两种解决方法)

    下午,计划2个小时搞定,个人官网第6次升级,就可以干点轻松的事了,结果,下午多搞了2个小时,晚上又搞了2个小时,才搞定. 最后一个世界难题是,URL传递中文参数. 问题大致是这么出现的:我为" ...

  7. charles抓包工具的中文乱码解决方法

    charles是 MAC上最好用的抓包工具.charles 网上的参考文档已经很多,我就不再赘述啦.只是说说我在安装过程遇到的问题和解决方法,仅供参考. charles抓包的数据中的中文内容显示乱码, ...

  8. windows下sqlplus / as sysdba报ora-12560的解决方法

    环境:win7_64位.数据库版本ORACLE11G_R2 在CMD窗口,使用下面三个命令可正常连接数据库:C:\Users\Administrator> sqplus /nolog C:\Us ...

  9. Windows Server 2008 R2提示api-ms-win-crt-runtime-l1-1-0.dll 丢失解决方法

    在一台服务器的全新windows Server 2008 R2 服务器上配置php运行环境, 在启动Apache之后,显示下图错误: 解决方法: 1.安装VC redit.exe程序解决 是VC的一个 ...

随机推荐

  1. Sort Transformed Array -- LeetCode

    Given a sorted array of integers nums and integer values a, b and c. Apply a function of the form f( ...

  2. luogu P1069 细胞分裂

    题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家.现在,他正在为一个细胞实 验做准备工作:培养细胞样本. Hanks 博士手里现在有 N 种细胞,编号从 1~N,一个 ...

  3. openresty的lua_package_path

    文档 lua_package_path可以配置openresty的文件寻址路径.官网文档如下: # 设置纯 Lua 扩展库的搜寻路径(';;' 是默认路径): lua_package_path '/f ...

  4. Java this关键字详解

    this 关键字用来表示当前对象本身,或当前类的一个实例,通过 this 可以调用本对象的所有方法和属性.例如: public class Demo{ public int x = 10; publi ...

  5. MySQL命令show full processlist

    processlist命令的输出结果显示了有哪些线程在运行,可以检查当前数据库的运行状态,两种方式使用这个命令. 1 进入MySQL/bin目录下输入mysqladmin processlist; 2 ...

  6. "library not found for - "解决办法

    在我们编译的时候有时候会报这个错误 "library not found for - " 由于是我们在项目中使用了一些第三方的库,就比如我再使用百度的静态库文件的时候,报出的这个错 ...

  7. 2017.6.8 spring-ldap基本使用总结

    之前学习过spring-ldap的官方文档:2017.4.10 spring-ldap官方文档学习 现在是对实际使用的spring-ldap及使用过程中遇到的问题,进行总结. 1.spring-lda ...

  8. Windows虚拟内存如何设置

    当我们在运行一些大型的软件,或者是刚刚退出游戏的时候经常会提示"你的虚拟内存过低"的提示,出现这种情况一般是:一:你的物理内存比较小,运行大的软件比较吃力:二:你运行了许多窗口或者 ...

  9. Win7系统管理员设置了系统策略,禁止进行此安装,怎么办

    系统管理员设置了系统策略,禁止进行此安装,怎么办 最佳答案 尝试方法一:   windows开始菜单,运行里面输入gpedit.msc打开组策略,   在"计算机配置"→管理模板→ ...

  10. Windows服务器SYSTEM权限Webshell无法添加3389账户情况突破总结

    转自:http://bbs.blackbap.org/thread-2331-1-1.html 近好多Silic的朋友在Windows下SYSTEM权限的php webshell下添加账户,但是却无法 ...