程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> 網絡編程-雙網段設備的廣播如何選擇廣播網段

網絡編程-雙網段設備的廣播如何選擇廣播網段

編輯:編程解疑
雙網段設備的廣播如何選擇廣播網段

計算機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;

最佳回答:


使用指定eth1的IP地址建立bind
struct sockaddr_in sin;

sin.sin_addr.s_addr = inet_addr("192.168.21.1"); // eth1 的地址
sin.sin_port = port;

bind(s, (strcut sockaddr*)&sin, sizeof(sin));

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved