计算机A具有两个网卡, 配置为不同两个网段, 比如IP分别是192.168.0.100, 和192.168.1.100
我的需求是这样子的, 需要在0段广播, 这样可以被其他设备发现.
测试中发现设备A只能在两个网段的其中一个子网里广播, 并且不知道在哪配置
测试过程是这样的,
计算机B配置为0段, 与A直连
计算机C配置为1段, 与A直连
启用两个网卡的时候, 计算机C是收不到A的广播信息的, 当禁用了1段所在的网卡后, 计算机C就可以收到广播了, 之间广播程序不重启.
广播部分主要代码是这样的
SOCKADDR_IN SockAddr;
// Init address
memset (&SockAddr, 0, sizeof(SockAddr));
SockAddr.sin_family = AF_INET;
SockAddr.sin_port = htons(theTCS->CFG.TCSLocalServer.Port);
SockAddr.sin_addr.S_un.S_addr = INADDR_BROADCAST;
// Create UDP sock
SOCKET BroadcastSock = socket (AF_INET, SOCK_DGRAM, 0);
// Enable broadcast option.
BOOL fBroadcast = TRUE;
setsockopt (BroadcastSock, SOL_SOCKET, SO_BROADCAST, (char *)&fBroadcast, sizeof(fBroadcast));
byte* buf = new byte[bufSize];
//fill buf
...
// Broadcast identifier
while(!m_quit)
{
if (sendto (BroadcastSock, (char*)buf, bufSize, 0, (sockaddr*)&SockAddr, sizeof(SockAddr)) == SOCKET_ERROR)
{
break;
}
Sleep(5000);
}
closesocket (BroadcastSock);
delete[] buf;