【网络通信】Wince 和 PC 通过USB 用Socket 进行通信

本文详细介绍了如何在Windows CE(Wince)设备和PC之间通过USB使用Socket进行通信。当Wince设备通过USB连接到PC时,设备会获得192.168.55.101的IP地址,而PC则获得192.168.55.100的IP。在这种情况下,Wince只能作为客户端,PC作为服务器。在通信过程中,Wince端的Socket连接成功后,recv操作可能立即返回-1,需要额外的判断来确认真正的连接状态。文章还展示了Wince客户端的代码实现,并讨论了处理连接失败和超时的策略。
摘要由CSDN通过智能技术生成

网上资料比较少或者说讲的不太详细,现在进行总结下,刚毕业没接触过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连接失败,请检查数据线!"))
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值