局域网 UDP 广播问题?

liuzhijingquan 2012-03-24 04:56:09
A机IP 10.1.21.11(子网掩码255.255.0.0,网关10.1.21.1)
B机IP 10.1.23.152(子网掩码255.255.0.0,网关10.1.23.1)

我在A机利用UDP进行广播,广播的地址为10.1.255.255,为什么在B机收不到。


ps:A机和B机网络是连同的,利用UDP单播时,B机可以接收到数据。

跪求各位大侠赐解!!!
...全文
285 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuzhijingquan 2012-03-31
  • 打赏
  • 举报
回复
谢谢大家,经过这几天试验:广播、组播都无法跨网段。又向网管中心核实,应该是网关的事,不知道是不是设置一下路由器就可以,谢谢大家,结贴。
emanuu 2012-03-26
  • 打赏
  • 举报
回复
试过多个单播并发的情况下都没有丢包,广播的话带宽就更不是问题了吧。
Kevin_qing 2012-03-26
  • 打赏
  • 举报
回复
带宽满了丢包就严重

emanuu 2012-03-26
  • 打赏
  • 举报
回复
事实是我跟他类似的情况是可以收到的,只是丢包严重
怎么解释??
Kevin_qing 2012-03-26
  • 打赏
  • 举报
回复
都过网关了,还说是一个子网。

网关要是没设置转发广播的话,你根本什么都收不到。为了避免网络阻塞和安全性考虑,一般网关都不会转发广播的。
emanuu 2012-03-26
  • 打赏
  • 举报
回复
是一个子网的啊,我现在也遇到这种问题,发单播的时候可以收到,但是发广播的时候丢包非常严重。
lz的情况说接受端收不到广播包的情况可以把地址改成单播试试,先排除代码的问题。
Kevin_qing 2012-03-26
  • 打赏
  • 举报
回复
无线的广播好像和有线不太一样的,你查下资料看看呢
Kevin_qing 2012-03-25
  • 打赏
  • 举报
回复
在一个子网里面才能直接广播,你那个是2个子网,得用组播之类的东西。

liuzhijingquan 2012-03-24
  • 打赏
  • 举报
回复
那个广播地址是255.255.255.255,会被网关挡回来的吧,顶一下,有其他解决办法吗
leetow2003 2012-03-24
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_5f18ff880101143n.html
liuzhijingquan 2012-03-24
  • 打赏
  • 举报
回复
十分感谢,那个host_addr应该是输入目标IP吧,但是我这种情况,我通过子网掩码将两个IP弄到一个网段,然后利用UDP广播,为什么会收不到数据呢,我用抓包工具,监控设置的端口,也没反应!高人指点啊
Tinary3v0 2012-03-24
  • 打赏
  • 举报
回复
端口设置

其余不甚了解了,去找一下飞鸽传书的源码看看,里面有类似过程。
里面有一个函数:

UdpSend( ULONG host_addr, int port_no, const char *buf, int len )
{
sockaddr_in addr; memset( &addr, 0, sizeof( addr ) ); addr.sin_family = AF_INET; addr.sin_port = port_no; addr.sin_addr.s_addr = host_addr;

if( ::sendto( udp_sd, buf, len, 0, ( LPSOCKADDR )&addr, sizeof( addr ) ) == SOCKET_ERROR )
{
switch ( WSAGetLastError( ) )
{
case WSAENETDOWN: break;
case WSAEHOSTUNREACH: static BOOL done; if( done == FALSE ){ done = TRUE; } return FALSE;
default: return FALSE;
}

if( WSockReset( ) != TRUE ){ return FALSE; }
if( hAsyncWnd && AsyncSelectRegist( hAsyncWnd ) != TRUE ){ return FALSE; }
if( ::sendto( udp_sd, buf, len, 0, ( LPSOCKADDR )&addr, sizeof( addr ) ) == SOCKET_ERROR ){ return FALSE; }
}

return TRUE;
}

你可以去查查,或者跟踪一下。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧