2008-09-08 22 views
4

我目前正在使用的系統由一臺運行XP的控制器PC與.Net 2連接到一組嵌入式系統組成。所有這些組件都通過以太網相互通信。我目前使用XP計算機上的TcpClient.Connect打開連接到嵌入式系統以發送TCP/IP消息。控制發送哪個網卡TCP/IP消息

我現在必須將XP計算機連接到外部網絡才能發送處理數據,因此現在XP計算機上有兩個網卡。但是,發送到外部網絡的消息不得出現在連接嵌入式系統的網絡上(不要消耗帶寬),並且發送到嵌入式系統的消息不得出現在外部網絡上。

因此,我所做的斷言是當使用TcpClient.Connect方法時,發送到定義的IP地址的消息在兩個網卡上發出。

如何指定通過哪種物理網卡發送消息,理想情況下使用.Net網絡API。如果在.Net中不存在這樣的方法,那麼我總是可以P /調用Win32 API。

Skizz

+0

這不取決於你想要訪問的IP地址嗎?還是它們在同一個子網? – sven 2008-09-08 11:38:04

+0

@sven:外部網絡(不是嵌入式網絡)的IP地址完全不受我控制。該網絡上的策略取決於將使用該機器的站點的系統管理員(它可以是靜態地址,dhcp,相同的子網,不同的子網,運營商pidgeon等)。 – Skizz 2008-09-08 12:54:50

回答

1

基本上,一旦TcpClient.Connect方法已經成功,這將已經創建了嵌入式系統的物理MAC地址和路由之間的映射應該採取到該地址(即,網絡卡使用)。

我不相信通過TcpClient連接發送的所有消息都將通過兩張網卡發送出去。

如果您有其他方面的建議,或者您是否猜測?

+0

我對網絡的內部工作並不十分了解,所以我只是猜測。問題所在的機器位於幾英里的道路上,我希望能夠在其上獲得一個時間插槽,以將嗅探器插入「外部網絡」適配器(即嵌入式系統未連接的適配器)並查看什麼出來。沒有什麼比硬數據好。 – Skizz 2008-09-08 12:54:50

1

Xp維護一個路由表,它將ip-address的範圍映射到網絡和網關。

您可以使用「路徑打印」查看錶格,使用「路由添加」您可以添加路由到您的嵌入式設備。

+0

Siebenga:我厭倦了使用無線和有線適配器的筆記本電腦上的'路由打印'命令,並且所有目的地都列出了兩次,每個適配器一次。有用的工具,但。 – Skizz 2008-09-08 12:54:50

5

嘗試爲客戶端使用套接字而不是TcpClient類。

然後你可以使用Socket.Bind定位您的本地網絡適配器

int port = 1234; 

    IPHostEntry entry = Dns.GetHostEntry(Dns.GetHostName()); 

    //find ip address for your adapter here 
    IPAddress localAddress = entry.AddressList.FirstOrDefault(); 

    IPEndPoint localEndPoint = new IPEndPoint(localAddress, port); 

    //use socket instead of a TcpClient 
    Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 

    //binds client to the local end point 
    client.Bind(localEndPoint); 

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.bind.aspx

2

如果您在機器上兩塊網卡的話,應該不會有問題。正常的IP行爲應該確保您的'私人'網絡(在這種情況下是嵌入式系統)的流量與公共網絡分開,而無需在代碼中執行任何操作。所需要的只是兩個網絡位於不同的IP子網上,並且您的「公共」NIC是默認網絡。

假設你的兩個網卡的配置如下:

NIC A (Public): 192.168.1.10 mask 255.255.255.0 
NIC B (Private): 192.168.5.10 mask 255.255.255.0 

需要驗證的唯一配置是網卡A是默認的。當您嘗試將數據包發送到您的專用網絡(192.168.50.0 - 192.168.50.255)中的任何地址時,您的IP堆棧將查找路由表並查看直接連接的網絡,並通過專用NIC轉發流量。到(直接連接的)公共網絡的任何流量都將被髮送到NIC A,同時將流向您的路由表中沒有更具體路由的任何地址。

你的路由表(netstat的-rn)應該是這個樣子:

IPv4 Route Table 
=========================================================================== 
Active Routes: 
Network Destination  Netmask   Gateway  Interface Metric 
      0.0.0.0   0.0.0.0  192.168.1.1  192.168.1.10 266 <<-- 
     127.0.0.0  255.0.0.0   On-link   127.0.0.1 306 
     127.0.0.1 255.255.255.255   On-link   127.0.0.1 306 
    127.255.255.255 255.255.255.255   On-link   127.0.0.1 306 
     169.254.0.0  255.255.0.0   On-link  192.168.1.10 286 
    169.254.255.255 255.255.255.255   On-link  192.168.1.10 266 
     192.168.1.0 255.255.255.0   On-link  192.168.1.10 266 
    192.168.1.10 255.255.255.255   On-link  192.168.1.10 266 
    192.168.1.255 255.255.255.255   On-link  192.168.1.10 266 
     192.168.5.0 255.255.255.0   On-link  192.168.5.10 266 
    192.168.5.10 255.255.255.255   On-link  192.168.5.10 266 
    192.168.5.255 255.255.255.255   On-link  192.168.5.10 266 
    255.255.255.255 255.255.255.255  On-link  192.168.1.10 276 
    255.255.255.255 255.255.255.255  On-link  192.168.5.10 276 
=========================================================================== 

也將有一定的組播路由(從224)已爲簡潔起見省略。 '< < - '表示默認路由,它應該使用公共接口。