网上资料比较少或者说讲的不太详细,现在进行总结下,刚毕业没接触过WINce,不过和MFC差不多,现在进入正题
刚开始我的疑惑是Wince是如何和PC进行通信的,以及能在USB模式下进行socket通信,后来知道,当你将(要安装Windows Mobile 设备中心)USB把Wince和PC相连接的时候,我在想WInce的IP如何和PC的IP在一个网段,要知道connect socket要在一个网段的,后来知道Wince用USB连接后(我猜是有虚拟网卡)会给WINce默认一个192.168.55.101的IP, 255.255.255.0的子网掩码,以及192.168.55.100的网关(你可以在连接USB后用wince的command和ipconfig下),然后网上查找会给电脑一个192.168.55.100的IP,我在想那么多Wince,而我的需求是不能再界面上配置IP,那么多wince设备连接,IP是如何分配的。我需要在程序里写死,后来知道Wince的IP是固定的,这样就简单了。
好知道了IP和原理接下去是如何进行通信了,你会说,和还不一样,和MFC的Socket一样呗。我开始也是这么理解的,网上资料又少,绕了很多路,在Wince和PC用USB通信的情况下,Wince只能做客户端,PC只能做服务端(我反过来试了下没能成功),谷歌上写的也是如此,这样害我的工作一下子变麻烦了。
========================
下面先贴出Wince客户端的代码:
WORD wVersionRequested;
WSADATA wsaData;
int err;
fd_set fdRead;
timeval TimeOut;
TimeOut.tv_sec=0;
TimeOut.tv_usec=500;
int nNetTimeout = 500;
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
}
//WinSock DLL 版本是否低于1.1
if ( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return 0;
}
SOCKET sockClient;
int nRet = 0;
DWORD dwErr = 0;
byte msg[1024];
byte recvData[255];
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.55.100");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(26023);
sockClient=socket(AF_INET,SOCK_STREAM,0);
while(true)
{
if(WAIT_OBJECT_0 == WaitForSingleObject(pDlg->m_hReadHandle, 500))
{
SetEvent(pDlg->m_hExitReadHandle);
break;
}
//向服务器发出连接请求
nRet = connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
if(SOCKET_ERROR == nRet)
{
//pDlg->GetDlgItem(IDC_STATIC_MSG)->SetWindowText(_T("USB连接失败,请检查数据线!"))