以前用mfc写的一个ftp客户端类,现在在学c#,改写其中一个函数发现老改不好,所以请教高手。函数代码如下:
BOOL CFtpClient::GetServerReply(SOCKET hSocket)
{
char szBuffer[1024] ;
int iLength ;
int iBuffer = 0 ;
BOOL bNeedReceive = true ;
char szMultiLineHead[MAX_PATH] ;
memset( szMultiLineHead , 0 ,MAX_PATH ) ;
m_strReply = ""; struct timeval timeout;
FD_SET readfd;
FD_ZERO(&readfd);
FD_SET(hSocket,&readfd);
timeout.tv_sec = 10;
timeout.tv_usec = 0; int reVal = 0;
reVal = select(0,&readfd,0,0,&timeout);
    if (reVal>0)
{    
while( bNeedReceive )
{
memset( szBuffer , 0 , 1024 ) ;
iBuffer = 0 ; //because the reply string possibly is multi line .
//so we must peek the reply info before receive it.
//peek the message .
if( ( iLength = recv( hSocket , szBuffer , 1024 , MSG_PEEK ) ) == SOCKET_ERROR )
return FALSE; if( iLength <= 0 )
return FALSE; replystr = ""; //find the line end .
while( szBuffer[iBuffer] != '\n' )
{
replystr+=(CString)szBuffer[iBuffer];
iBuffer ++ ;
if( iBuffer >= iLength )
break ;
}
//skip the '\n'
iBuffer ++ ;
TRACE( "%d\r\n" , iLength ) ; m_strReply += replystr+"<BR>"; //receive server reply string .
if( ( iLength = recv( hSocket , szBuffer , iBuffer , 0 ) ) == SOCKET_ERROR )
return FALSE; if( iLength < 1024 )
szBuffer[iLength] = 0 ;
else
szBuffer[1023] = 0 ; //notify the parent wnd.
//SendMsgToParentWnd( szBuffer , false ) ; if( strlen( szMultiLineHead ) == 0 )
{
nReplyCode = GetReplyCode( szBuffer ) ;
itoa(nReplyCode , szMultiLineHead , 10 ) ;
if( szBuffer[3] == '-' )
bNeedReceive = true ;
else
bNeedReceive = false ;
}
else
{
if( strncmp( szMultiLineHead , szBuffer , 3 ) == 0 )
{
if( szBuffer[3] == '-' )
bNeedReceive = true ;
else
bNeedReceive = false ;
}
else
bNeedReceive = true ;
} }
    } nReplyCode = GetReplyCode ( szBuffer ) ; //return nReplyCode ;
if(replystr.GetLength()>0)
m_pFireWallCheck=replystr.GetAt(0)-48;
return TRUE;
}