这段代码主要用于远程控制中获取服务端的 ,硬盘信息
void ShowDriveList(SOCKET cs,COMMAND_MSG msg)
{
DRIVE_INFO info;
for( TCHAR cLetter = _T('B'); cLetter <= _T('Z'); cLetter++ )
{
memset(&info,0,sizeof(DRIVE_INFO));
CString sDrive = cLetter;
sDrive += _T(":"); //例如:c:
UINT nType = GetDriveType( sDrive + _T("\\") );//得到硬盘类型
strcpy(info.DriveName,sDrive.GetBuffer(0));//把c:存储进DriveName
info.nType = nType;
info.isEnd=FALSE;//默认为假
while(1)
{
int nRet=send(cs,(char *)&info,sizeof(info),NULL);//每一个盘符发送一个消息过去
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
else goto exit1;
}
else
break;//发送正确退出循环
}
}
exit1:
memset(&info,0,sizeof(DRIVE_INFO));
info.isEnd=TRUE;
while(1)
{
int nRet=send(cs,(char *)&info,sizeof(info),NULL);
if(nRet==SOCKET_ERROR)
{
if(WSAGetLastError()==WSAEWOULDBLOCK)
{
Sleep(50);
continue;
}
return;
}
return;
}
}
第一:为什么要加 goto exit1;
这段代码,在什么情况才执行这段代码呢?两段代码内容差不多,就info.isEnd=TRUE; 这的区别
第二个问题  :for( TCHAR cLetter = _T('B'); cLetter <= _T('Z'); cLetter++ )
这是什么意思_T是做什么用的  ,

解决方案 »

  1.   

    _T是指'Z'用UNICODE编码方式,至于第一个问题,你去看MSDN上对send的返回值吧,网络编程我本身也不太会
      

  2.   

    用UNICODE编码方式有什么好处 ?我不是很懂 
      

  3.   

    UNICODE是国际化的标准,所有的编译器都支持它,这主要是为了统一字符编码的格式
      

  4.   

    第一:为什么要加 goto exit1; 
    这段代码,在什么情况才执行这段代码呢?两段代码内容差不多,就info.isEnd=TRUE; 这的区别 感觉他好像把所有字母循环一次,isEnd表示是否有此驱动器,(只是推测)
      

  5.   

    用UNICODE编码方式有什么好处 ?我不是很懂 
    =============
    应该说用UNICODE是以后开发的大趋势,至于好处是什么建议楼主找一些专门讲UNICODE的书或是文章看一下
      

  6.   


    如果将来要支持多国语言的话 用UNICODE双字节以后就不能麻烦了
      

  7.   

    什么意思?难道如果对方系统中没有那个盘符,就会发送失败 ,然后跳转到go to指定的位置执行?
      

  8.   

    第一个问题
    前一段代码并未执行退出
    退出都是在exit1中执行的
    第二个问题
    unicode编码方式