Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблемы с написание клиента Http

1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Имеется такой код:

BOOL MySendFile(TCHAR* myfilename)
// посылка выбранного файла на сервер
{

int sock, recv_len, af, sendres, res;
unsigned long mysize, szCodedData, lSize;
TCHAR answercode[4], recv_buf[1024], *CodedData, mystrsize[10], myhostname[80];
struct sockaddr_in servAddr;
struct hostent *hp;
FILE *f;
WSADATA W;

f = fopen(myfilename,"rb");
fseek(f,0,SEEK_END);
lSize = ftell(f);
fclose(f);
szCodedData = (unsigned long)(1.5*(long double)lSize);
CodedData = new TCHAR[szCodedData];
if (!(mysize=base64encode(myfilename,CodedData,szCodedData)))
// myfilename -- имя выбранного файла
// CodedData -- буфер, в который кодируется по методу base64 этот файл
// szCodedData -- размер этого буфера
{
MessageBox(NULL,"Невозможно преобразовать файл по методу base64.","Ошибка",MB_OK);
delete []CodedData;
return FALSE;
}
res = WSAStartup(0x0101,&W);
sock = socket(AF_INET,SOCK_STREAM,0);
if (sock<0)
{
MessageBox(NULL,"Невозможно создать сокет.","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
memset((TCHAR*)&servAddr,0,sizeof(servAddr));
servAddr.sin_family = AF_INET;
hp = gethostbyname("localhost");
memcpy(&servAddr.sin_addr,hp->h_addr,hp->h_length);
servAddr.sin_port = htons(PORTNUMBER);
if (res = connect(sock,(sockaddr*)&servAddr,sizeof(servAddr))<0)
{
MessageBox(NULL,"Невозможно установить сокетное соединения.","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"POST /upload.php HTTP/1.1\r\n"); // &#239;&#240;&#224;&#226;&#232;&#235;&#252;&#237;&#238; &#235;&#232;?
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Host: ");
strcat(mymessage,"localhost");
strcat(mymessage,"\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Content-Type: multipart/form-data;\r\n\tboundary=----------164756348538\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
/* strcpy(mymessage,"Content-Length: "); // &#243;&#242;&#238;&#247;&#237;&#232;&#242;&#252; &#237;&#224;&#241;&#247;&#184;&#242; Content-Length
ultoa(mysize,mystrsize,10);
strcat(mymessage,mystrsize);
strcat(mymessage,"\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
} */
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Connection: close\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Cache-control: no-cache\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n\r\n\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"------------164756348538\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Content-Disposition: form-data; name=\"send_file\"; filename=\"");
strcat(mymessage,myfilename);
strcat(mymessage,"\"\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{ res = WSAGetLastError();
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Content-Type: application/octet-stream\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{ res = WSAGetLastError();
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Content-Length: ");
ultoa(mysize,mystrsize,10);
strcat(mymessage,mystrsize);
strcat(mymessage,"\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"Content-Transfer-Encoding: base64\r\n\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
sendres = send(sock,CodedData,mysize,0); // &#238;&#242;&#239;&#240;&#224;&#226;&#235;&#255;&#229;&#236; &#244;&#224;&#233;&#235; &#237;&#224; &#241;&#229;&#240;&#226;&#229;&#240;
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
//recv_len = recv(sock,recv_buf,strlen(recv_buf),0);
strcpy(mymessage,"------------164756348538--\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"Ошибка при посылке данных","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
recv_len = recv(sock,recv_buf,strlen(recv_buf),0); // &#241;&#247;&#232;&#242;&#251;&#226;&#224;&#229;&#236; &#238;&#242;&#226;&#229;&#242; &#241; &#241;&#229;&#240;&#226;&#229;&#240;&#224;
if (recv_len<=0)
// если длина ответа меньше или рана нулю
{
res = WSAGetLastError();
MessageBox(NULL,"Ошибка приёма ответа с сервера","Ошибка",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
recv_buf[recv_len] = '\0';
MessageBox(NULL,(LPCTSTR)recv_buf,"Ответ сервера",MB_OK);
/* strncpy(answercode,recv_buf,3); // &#241;&#247;&#232;&#242;&#251;&#226;&#224;&#229;&#236; &#231;&#237;&#224;&#247;&#229;&#237;&#232;&#229; &#234;&#238;&#228;&#224; &#238;&#242;&#226;&#229;&#242;&#224; &#241;&#229;&#240;&#226;&#229;&#240;&#224;
answercode[3] = '\0';
if ((strcmp(answercode,"200")!=0)&&(strcmp(answercode,"201")!=0))
// &#229;&#241;&#235;&#232; &#234;&#238;&#228; &#238;&#242;&#226;&#229;&#242;&#224; &#241;&#229;&#240;&#226;&#229;&#240;&#224; &#237;&#229; &#240;&#224;&#226;&#229;&#237; 200 &#232;&#235;&#232; 201
{
MessageBox(NULL,"&#205;&#229;&#243;&#228;&#224;&#247;&#237;&#224;&#255; &#239;&#229;&#240;&#229;&#228;&#224;&#247;&#224; &#244;&#224;&#233;&#235;&#224;.","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
} */
closesocket(sock);
WSACleanup();
delete []CodedData;
return TRUE;
} // конец функции MySendFile



Суть этой функции такова -- методом POST посылает на сервер бинарный файл (заданный параметром myfilename), предварительно закодировав его методом base64.
1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
При этом в блоке
strcpy(mymessage,"Content-Type: application/octet-stream\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{ res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}


возникает ошибка при передаче сообщения функцией send (но до этого вызовы send работают нормально). Код этой ошибки -- 10053. Одна из причин этой ошибки может быть в том, что я не правильно написал заголовок или тело метода POST. (Я некоторые части кода закомментировал для отлладки).

В чём может быть причина этого?

На моём компьютере стоит сервер UniServer, ниже приведён HTML-код страницы http://localhost/ :

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=cp1251" />
<title>Apache test.</title>
</head>
<body>
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
Отправить этот файл: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>

</body>
</html>



Если посылать файл с помощью этой страницы, то посылка происходит успешно, а в результате неё в файле access.log этого сервера добавляется следующая строка:

127.0.0.1 - - [14/Dec/2005:13:30:44 +0300] "POST /upload.php HTTP/1.1" 200 322 "http://localhost/" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 1.0.3705)"

Если же я посылаю из своей программы, то у меня получается другая строка:

127.0.0.1 - - [14/Dec/2005:17:55:33 +0300] "POST /upload.php HTTP/1.1" 200 148 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"

Почему у меня во второй строке не пишется после двух чисел "http://localhost/" ?

Что мне нужно исправить в моей функции, чтобы она нормально работала?
3
16 декабря 2005 года
Green
4.8K / / 20.01.2000
М-да...
Я бы рекомендовал сначала привести код в порядок: написать его действительно на С++, исключить повторы, например с помощью try/catch, разбить мега-функцию на более читабельные функции.
Тогда и проблема может стать значительно яснее.
1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Green, но хотя-бы формат команды POST протокола HTTP Вы не могли бы привести?
Потому что моя ошибка -- результат неправильного указания параметров этой команды.
1.8K
16 декабря 2005 года
SeregaLBN
62 / / 03.10.2003
Знаешь, никто не будет даже смотреть такой код...

А по теме:
в файле <winerror.h>
 
Код:
//  An established connection was aborted by the software in your host machine.
//
#define WSAECONNABORTED                  10053L


Ещё я знаю что при отсылке данных как с HTML формы, надо в хидере указывать следующее:
 
Код:
CString strHeader(_T("Content-Type: application/x-www-form-urlencoded; text/html;charset=windows-1251\r\naccept-encoding: gzip, deflate"));
13K
16 декабря 2005 года
sup.by
22 / / 15.12.2005
.... у MFC есть такие классы .... CInternetSession ... и ... CInternetConnection .... ну и производные всякие .... так вот юзай из ... будет проще и эфективнее ...
3
16 декабря 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by sup.by
.... у MFC есть такие классы .... CInternetSession ... и ... CInternetConnection .... ну и производные всякие .... так вот юзай из ... будет проще и эфективнее ...


Не уверен, что эффективнее...

1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Вот нашёл пример POST-запроса:

http://www.phpclub.ru/detail/article/http_request#part_3_2

На сколько он верный?
3
16 декабря 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by erslgoeirjh
Вот нашёл пример POST-запроса:

http://www.phpclub.ru/detail/article/http_request#part_3_2

На сколько он верный?



Если присовокупить ремарки в конце статьи, то вполне верный.

1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Green, спасибо -- теперь клиент работает. Нужно было добавить Referer, убрать \n в одном месте и в Content-Disposition указать правильное значение параметра name ("userfile", а не "send_file").

Но вот в связи с этим возник вопрос: при использовании кодирования файла по методу base64 размер его увеличивается примерно в 1,3 раза. То же и на сервере -- размер файла больше исходного примерно в 1,3 раза. Должно ли так быть или же на сервере файл должен иметь исходный размер?
Если второй ответ, то что мне нужно исправить?
1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Получившийся код:

BOOL MySendFile(char* myfilename)
// &#239;&#238;&#241;&#251;&#235;&#234;&#224; &#226;&#251;&#225;&#240;&#224;&#237;&#237;&#238;&#227;&#238; &#244;&#224;&#233;&#235;&#224; &#237;&#224; &#241;&#229;&#240;&#226;&#229;&#240; &#247;&#229;&#240;&#229;&#231; &#241;&#238;&#234;&#229;&#242;&#237;&#243;&#254; &#241;&#226;&#255;&#231;&#252;
{

int sock, recv_len, af, sendres, res;
unsigned long mysize, mysize1, szCodedData, lSize, lres;
TCHAR answercode[4], recv_buf[1024], *CodedData, mystrsize[12], myhostname[80];
struct sockaddr_in servAddr;
struct hostent *hp;
FILE *f;
WSADATA W;

f = fopen(myfilename,"rb");
fseek(f,0,SEEK_END);
lSize = ftell(f);
fclose(f);
szCodedData = (unsigned long)(1.5*(long double)lSize);
CodedData = new TCHAR[szCodedData];
if (!(mysize=base64encode(myfilename,CodedData,szCodedData)))
// myfilename -- &#232;&#236;&#255; &#226;&#251;&#225;&#240;&#224;&#237;&#237;&#238;&#227;&#238; &#244;&#224;&#233;&#235;&#224;
// CodedData -- &#225;&#243;&#244;&#229;&#240;, &#226; &#234;&#238;&#242;&#238;&#240;&#251;&#233; &#234;&#238;&#228;&#232;&#240;&#243;&#229;&#242;&#241;&#255; &#239;&#238; &#236;&#229;&#242;&#238;&#228;&#243; base64 &#253;&#242;&#238;&#242; &#244;&#224;&#233;&#235;
// szCodedData -- &#240;&#224;&#231;&#236;&#229;&#240; &#253;&#242;&#238;&#227;&#238; &#225;&#243;&#244;&#229;&#240;&#224;
{
MessageBox(NULL,"&#205;&#229;&#226;&#238;&#231;&#236;&#238;&#230;&#237;&#238; &#239;&#240;&#229;&#238;&#225;&#240;&#224;&#231;&#238;&#226;&#224;&#242;&#252; &#244;&#224;&#233;&#235; &#239;&#238; &#236;&#229;&#242;&#238;&#228;&#243; base64.","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
delete []CodedData;
return FALSE;
}
res = WSAStartup(0x0101,&W);
sock = socket(AF_INET,SOCK_STREAM,0);
res = WSAGetLastError();
if (sock<0)
{
MessageBox(NULL,"&#205;&#229;&#226;&#238;&#231;&#236;&#238;&#230;&#237;&#238; &#241;&#238;&#231;&#228;&#224;&#242;&#252; &#241;&#238;&#234;&#229;&#242;.","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
memset((TCHAR*)&servAddr,0,sizeof(servAddr));
servAddr.sin_family = AF_INET;
hp = gethostbyname("localhost");
memcpy(&servAddr.sin_addr,hp->h_addr,hp->h_length);
servAddr.sin_port = htons(PORTNUMBER);
if (res = connect(sock,(sockaddr*)&servAddr,sizeof(servAddr))<0)
{
res = WSAGetLastError();
MessageBox(NULL,"&#205;&#229;&#226;&#238;&#231;&#236;&#238;&#230;&#237;&#238; &#243;&#241;&#242;&#224;&#237;&#238;&#226;&#232;&#242;&#252; &#241;&#238;&#234;&#229;&#242;&#237;&#238;&#229; &#241;&#238;&#229;&#228;&#232;&#237;&#229;&#237;&#232;&#229;.","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"POST /upload.php HTTP/1.0\r\n"); // &#239;&#240;&#224;&#226;&#232;&#235;&#252;&#237;&#238; &#235;&#232;?
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Продолжение кода:

strcpy(mymessage,"Host: ");
strcat(mymessage,"localhost");
strcat(mymessage,"\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Referer: http://localhost/\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Content-Type: multipart/form-data;\n\tboundary=----------164756348538\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Content-Length: "); // &#228;&#238;&#235;&#230;&#237;&#224; &#239;&#229;&#240;&#229;&#228;&#224;&#226;&#224;&#242;&#252;&#241;&#255; &#226;&#241;&#255; &#228;&#235;&#232;&#237;&#224; &#242;&#229;&#235;&#224; POST-&#231;&#224;&#239;&#240;&#238;&#241;&#224;
ultoa(mysize,mystrsize,10);
strcat(mymessage,mystrsize);
strcat(mymessage,"\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Connection: close\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Cache-control: no-cache\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)\r\n\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
1.8K
16 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Окончание кода:

strcpy(mymessage,"------------164756348538\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Content-Disposition: form-data; name=\"userfile\"; filename=\"");
strcat(mymessage,myfilename);
strcat(mymessage,"\"\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{ res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Content-Type: application/octet-stream\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{ res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"Content-Transfer-Encoding: base64\r\n\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
sendres = send(sock,CodedData,mysize,0); // &#238;&#242;&#239;&#240;&#224;&#226;&#235;&#255;&#229;&#236; &#244;&#224;&#233;&#235; &#237;&#224; &#241;&#229;&#240;&#226;&#229;&#240;
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
strcpy(mymessage,"\r\n------------164756348538--\r\n");
sendres = send(sock,mymessage,strlen(mymessage),0);
if (sendres==SOCKET_ERROR)
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232; &#239;&#238;&#241;&#251;&#235;&#234;&#229; &#228;&#224;&#237;&#237;&#251;&#245;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
recv_len = recv(sock,recv_buf,strlen(recv_buf),0); // &#241;&#247;&#232;&#242;&#251;&#226;&#224;&#229;&#236; &#238;&#242;&#226;&#229;&#242; &#241; &#241;&#229;&#240;&#226;&#229;&#240;&#224;
if (recv_len<=0)
// &#229;&#241;&#235;&#232; &#228;&#235;&#232;&#237;&#224; &#238;&#242;&#226;&#229;&#242;&#224; &#236;&#229;&#237;&#252;&#248;&#229; &#232;&#235;&#232; &#240;&#224;&#226;&#237;&#224; &#237;&#243;&#235;&#254;
{
res = WSAGetLastError();
MessageBox(NULL,"&#206;&#248;&#232;&#225;&#234;&#224; &#239;&#240;&#232;&#229;&#236;&#224; &#238;&#242;&#226;&#229;&#242;&#224; &#241; &#241;&#229;&#240;&#226;&#229;&#240;&#224;","&#206;&#248;&#232;&#225;&#234;&#224;",MB_OK);
closesocket(sock);
WSACleanup();
delete []CodedData;
return FALSE;
}
recv_buf[recv_len] = '\0';
MessageBox(NULL,(LPCTSTR)recv_buf,"&#206;&#242;&#226;&#229;&#242; &#241;&#229;&#240;&#226;&#229;&#240;&#224;",MB_OK);
// &#229;&#241;&#235;&#232; &#237;&#232;&#234;&#224;&#234;&#232;&#245; &#238;&#248;&#232;&#225;&#238;&#234; &#237;&#229; &#239;&#240;&#238;&#232;&#231;&#238;&#248;&#235;&#238;
closesocket(sock);
WSACleanup();
delete []CodedData;
return TRUE;
} // &#234;&#238;&#237;&#229;&#246; &#244;&#243;&#237;&#234;&#246;&#232;&#232; MySendFile
15K
17 декабря 2005 года
cozzzy
2 / / 17.12.2005
erslgoeirjh Интересно, а с какого ты языка пересел на С++?
Я конечно и раньше видел огромные (длинные) функции, но твоя - это просто что-то...

Еще немного манипуляций, и можно отправлятся на конкурс "Самый непонятный код" %)
1.8K
21 декабря 2005 года
erslgoeirjh
26 / / 16.12.2005
Всё, спасибо -- клиент у меня теперь посылает данные правильно. Надо было в одном месте убрать \r, в Content-Length добавить 165 и убрать вызов фунции base64encode (но в Content-Transfer-Encoding оставить base64 !) -- и бинарный файл передаётся на сервер в своём исходном размере.
Проверял на различных типах файлов.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог