兩臺WINCE的網絡通信

//自己現在手頭正在調試兩臺WINCE6.0操作系統的機器,其中要用到其之間通過一根網線的鏈接來進行網絡通信,目前還沒有調通,但

//是下面是我同學博客裏的文章,在這裏轉載一下,可以借鑑~~等調通之後,在系統的做個總結,來跟大家共享~~

 

 

=============================================================

標題:wince網絡通訊的問題

摘要:

備註:Windows CE 5.0 + udp

日期:2010.5.25

姓名:朱銘雷

=============================================================

       兩臺wince設備進行基於udp協議的網絡通訊,發現只能單向收發。A發B收可以的話,則A收B發就不通。試着將網線調了個頭,就發現可能變爲了B發A收可以,但是B收A發卻不行。爲此請教了一些人,在csdn上還開了一個帖子。最後確定是mac地址的問題。將其中一臺wince設備與另一個ARM開發板進行通訊,發現收發都正常。後來用程序獲取這幾臺設備的mac地址,發現正常通訊的兩臺設備,它們的mac地址是不相同的,而收發不正常的兩臺設備,他們的mac地址是相同的。比如,我先前不能夠正常進行通訊的兩臺wince設備,他們的mac地址都爲00:0A:EB:FD:7A:00。

       獲取mac地址的程序如下,這個在MSDN裏和網絡上都可以找得到。

       HRESULT hr;  

    IPAddr  ipAddr;  

    ULONG   pulMac[2];  

    ULONG   ulLen;  

    ipAddr = inet_addr ("192.168.0.17"); 

    memset (pulMac, 0xff, sizeof (pulMac));  

    ulLen = 6;  

      

    hr = SendARP (ipAddr, 0, pulMac, &ulLen);  

    printf ("Return %08x, length %8d/n", hr, ulLen);  

      

    size_t i, j;  

    char * szMac = new char[ulLen*3];  

    PBYTE pbHexMac = (PBYTE) pulMac;  

    //  

    // Convert the binary MAC address into human-readable  

    //  

    for (i = 0, j = 0; i < ulLen - 1; ++i) {  

        j += sprintf (szMac + j, "%02X:", pbHexMac[i]);  

    }  

      

    sprintf (szMac + j, "%02X", pbHexMac[i]);  

    printf ("MAC address %s/n", szMac);  

delete [] szMac;  

然後試着修改mac地址,看了一下設備,目前這臺設備在註冊表中可以設置mac地址,猜測開機啓動的時候,驅動應該會去讀取註冊表中的mac地址。將其中一臺wince設備的mac地址修改爲00:0A:EB:FD:7A:11。重新啓動了系統,再次測試,先前udp通訊不正常的兩臺設備已經能夠正常通訊了,收發都沒有問題。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/joyzml/archive/2010/05/25/5623414.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章