int ReadFTPServerReply(SOCKET hControlChannel)
{
int iBytesRead;
int iBufferLength;
int iEnd;
int iSpaceRemaining;
char gsRB[1024];
int iReplySize;
memset((char *)gsRB, 0, sizeof(gsRB));
if((iBytesRead = recv(hControlChannel, gsRB, sizeof(gsRB), MSG_PEEK)) > 0) {
printf("Bytes read: %d\n", iBytesRead);
if((iReplySize = ReadReplyLine(gsRB)) == 0)
iBufferLength = iSpaceRemaining = sizeof(gsServerReplyBuffer);
else
iBufferLength = iSpaceRemaining = iReplySize;
}
else
return 999;
iEnd = 0;
do {
iSpaceRemaining -= iEnd;
iBytesRead = recv(hControlChannel, (char *)(gsServerReplyBuffer+iEnd), iSpaceRemaining, 0);
iEnd+=iBytesRead;
if(*(gsServerReplyBuffer+(iEnd-2)) == '\r' && *(gsServerReplyBuffer+(iEnd-1)) == '\n')
break;
} while (iBytesRead > 0 && iEnd < iBufferLength);
if(iBytesRead == SOCKET_ERROR)
return 999;
gsServerReplyBuffer[iEnd] = '\0';
return GetReplyCode(gsServerReplyBuffer); //Просто переводит код ответа в int
}
int ReadReplyLine(char *lpszReplyBuffer)
{
char *lpEOL = NULL;
unsigned int nLimitReplyBytes;
char temp[5] = "";
char *pLastLineCode = &temp[0];
char *lpLastLine = NULL;
int i;
temp[4] = '\0';
nLimitReplyBytes = 0;
if(*(lpszReplyBuffer+3) == MULTILINE_REPLY) { //#define MULTILINE_REPLY '-'
for (i = 0; i < 3; i++ )
*(pLastLineCode+i) = *(lpszReplyBuffer+i);
*(pLastLineCode+i) = ' ';
if((lpLastLine = strstr(lpszReplyBuffer, pLastLineCode))) {
lpEOL = strstr(lpLastLine, (char *)EOL_MARKER); //#define EOL_MARKER "\r\n"
nLimitReplyBytes = lpEOL ? (unsigned int)((lpEOL - lpszReplyBuffer)+2) : 0;
}
else
nLimitReplyBytes = 0;
}
else {
lpEOL = strstr(lpszReplyBuffer, (char *)EOL_MARKER);
nLimitReplyBytes = lpEOL ? (unsigned int)((lpEOL - lpszReplyBuffer)+2) : 0;
}
return nLimitReplyBytes;
}
Многострочный ответ ftp-сервера
У меня есть код:
Код:
Но, к сожалению, желаемого результата я не достигаю. Есть предположение, что я в буфер gsServerReplyBuffer(объявлен как массив char [1024]) не принимаю все сообщение, поэтому и не могу найти нужный код ответа.
Цитата: NewGP
Есть предположение...
Тык а проверить-то не судьба?