日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

多网卡指定网卡发送数据

發(fā)布時間:2025/3/21 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 多网卡指定网卡发送数据 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

環(huán)境:

2個網(wǎng)卡,分別在不同網(wǎng)絡環(huán)境。

局域網(wǎng)一: 網(wǎng)關(guān):10.9.16.254

? ? ? ? ? ? ? ? ? ? ?電腦地址1:10.9.16.88

局域網(wǎng)二:網(wǎng)關(guān):10.9.24.1?

? ? ? ? ? ? ? ? ? ? 電腦地址2:10.9.24.88

? ? ? ? ? ? ? ? ??

要求: 通過 ?10.9.16.88 這個地址 發(fā)送一段數(shù)據(jù)到 10.9.24.1

?

代碼如下:

?

?

  • #include "stdafx.h"

  • #include <WINSOCK2.H>

  • #include <stdio.h>

  • #pragma comment(lib,"ws2_32.lib")

  • ?
  • ?
  • #include<process.h>

  • ?
  • void udpTest();

  • int _tmain(int argc, _TCHAR* argv[])

  • {

  • ?
  • udpTest();

  • ?
  • ?
  • ?
  • ?
  • return 1;

  • }

  • ?
  • ?
  • void udpTest()

  • {

  • WORD wVersionRequested;

  • WSADATA wsaData;

  • int err;

  • ?
  • wVersionRequested = MAKEWORD( 1, 1 );

  • ?
  • err = WSAStartup( wVersionRequested, &wsaData );

  • if ( err != 0 ) {

  • return;

  • }

  • ?
  • if ( LOBYTE( wsaData.wVersion ) != 1 ||

  • HIBYTE( wsaData.wVersion ) != 1 ) {

  • WSACleanup( );

  • return;

  • }

  • SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);

  • ?
  • ?
  • SOCKADDR_IN addrSelf;//本地地址

  • addrSelf.sin_addr.S_un.S_addr = inet_addr("10.9.16.88");//指定網(wǎng)卡的地址

  • addrSelf.sin_family = AF_INET;

  • addrSelf.sin_port = htons(17557);

  • if( -1 == bind(sockClient,(SOCKADDR*)&addrSelf,sizeof(SOCKADDR)))//把網(wǎng)卡地址強行綁定到Socket

  • printf("bind error!\r\n");

  • ?
  • ?
  • SOCKET SendToSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

  • printf("bind:%d\r\n" ,bind( SendToSocket , (SOCKADDR*)&addrSelf , sizeof(SOCKADDR)));

  • SOCKADDR_IN addrSrv;

  • addrSrv.sin_addr.S_un.S_addr=inet_addr("10.9.24.1");//發(fā)往10.9.24.1 ;

  • addrSrv.sin_family=AF_INET;

  • addrSrv.sin_port=htons(17557);

  • ?
  • while(1)

  • {

  • char* pchSend = "abcdefghijklmn";

  • int i = sendto( SendToSocket , pchSend , strlen(pchSend) , 0 , (sockaddr*)&addrSrv,sizeof(sockaddr));

  • printf( "sendto:%d\r\n" , i );

  • printf(".........\r\n");

  • Sleep(3000);

  • }

  • ?
  • ?
  • ?
  • closesocket(sockClient);

  • WSACleanup();

  • }

  • ?

    ?

    請注意這段代碼:

    ?

  • SOCKADDR_IN addrSelf;//本地地址

  • addrSelf.sin_addr.S_un.S_addr = inet_addr("10.9.16.88");//指定網(wǎng)卡的地址

  • addrSelf.sin_family = AF_INET;

  • addrSelf.sin_port = htons(17557);

  • if( -1 == bind(sockClient,(SOCKADDR*)&addrSelf,sizeof(SOCKADDR)))//把網(wǎng)卡地址強行綁定到Socket

  • printf("bind error!\r\n");

  • 一般來說 UDP 是不需要一個地址綁定到socket的,只有TCP需要綁定一個端口和ip。

    那么,如果我們在這里,不運行 bind() 這個函數(shù),系統(tǒng)會根據(jù)自身路由,把發(fā)往10.9.24.1 的報文 通過 10.9.24.88這塊網(wǎng)卡發(fā)送出去。

    總結(jié)

    以上是生活随笔為你收集整理的多网卡指定网卡发送数据的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。