=============================================================
标题: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通讯不正常的两台设备已经能够正常通讯了,收发都没有问题。