//自己現在手頭正在調試兩臺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