| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Сети > НТТР клиент.. |
| Автор: Игрь 15.11.2006, 18:10 |
| Здравствуйте люди .... Вот решил замутить НТТР клиента ,чтобы профиксить принцип работы этого протокола...но появилась небольшая проблема... Всё что связано с НТМL данными всё чин чинарём, но когда программа клиент пытается загрузить gif/jpeg всё сразу стопорится, предварительно послав программу...клиенту какие то карамбули))) А в асинхрнном режиме работы сокетов,просто пропускает загрузку изображений...что делать, как быть ? Да кстати,буфер у проги в видe char Buffer[1000000]; Огромное спасибо... |
| Автор: ptr 15.11.2006, 19:01 |
| Показывай код. |
| Автор: Игрь 15.11.2006, 22:05 |
| //--------------------------------------------------------------------------- #include <winsock2.h> #include <iostream.h> #pragma hdrstop //--------------------------------------------------------------------------- #pragma argsused #define PORT 4444 int main(int argc, char* argv[]) { WSADATA wsaData; int err = WSAStartup(MAKEWORD(2, 0), &wsaData); if(err != 0) { cout<<"Does not manage to load library an socket"<<endl; Sleep(10000); return(1); } int Size; SOCKET Server,Client,Connect; unsigned long UlongMode; sockaddr_in ServerAddr,ClientAddr,ConnectAddr; hostent *host=NULL; char szServerName[1024]; strcpy(szServerName,"127.0.0.1"); if((Server=socket(AF_INET,SOCK_STREAM,IPPROTO_IP))==SOCKET_ERROR) return(1); UlongMode=1; ioctlsocket(Server,FIONBIO,(unsigned long*)&UlongMode); ServerAddr.sin_family=AF_INET; ServerAddr.sin_port=htons(PORT); ServerAddr.sin_addr.s_addr=htons(INADDR_ANY); if(bind(Server,(sockaddr*)&ServerAddr,sizeof(ServerAddr))==INVALID_SOCKET)return(1); if((Connect=socket(AF_INET,SOCK_STREAM,IPPROTO_IP))==SOCKET_ERROR) return(1); ConnectAddr.sin_family=AF_INET; ConnectAddr.sin_port=htons(80); ConnectAddr.sin_addr.s_addr=inet_addr(szServerName); listen(Server,5); FD_SET ReadSet; int ReadySock,ret; while(true) { if((Connect=socket(AF_INET,SOCK_STREAM,IPPROTO_IP))==SOCKET_ERROR) return(1); ConnectAddr.sin_family=AF_INET; ConnectAddr.sin_port=htons(80); ConnectAddr.sin_addr.s_addr=inet_addr(szServerName); if(ConnectAddr.sin_addr.s_addr==INADDR_NONE) { host=gethostbyname(szServerName); if(host==NULL) { cout<<"Error"<<endl; Sleep(1000); return(1); } CopyMemory(&ConnectAddr.sin_addr,host->h_addr_list[0],host->h_length); } FD_ZERO(&ReadSet); FD_SET(Server,&ReadSet); //timeval times; //times.tv_sec=2; //times.tv_usec=0; if ((ReadySock=select(0,&ReadSet,NULL,NULL,NULL))==SOCKET_ERROR) { MessageBox(0, "Select filed", "Error", 0); } if (FD_ISSET(Server,&ReadSet)) { int iSize = sizeof(ClientAddr); Client=accept(Server,(sockaddr *)&ClientAddr, &iSize); if (Client == INVALID_SOCKET) { MessageBox(0, "Accept filed", "Error", 0); break; } cout<<inet_ntoa(ClientAddr.sin_addr)<<endl; } cout<<"ok"<<endl; char RecvBuff[1000000]; while(true) { Sleep(20); ret=recv(Client,RecvBuff,sizeof(RecvBuff),0); if(ret==SOCKET_ERROR) { cout<<"Mistake acceptance data"<<endl; break; } if(ret==0) { cout<<"No pol send"<<endl; break; } RecvBuff[ret]='\0'; cout<<RecvBuff<<endl; if(connect(Connect,(sockaddr*)&ConnectAddr,sizeof(ConnectAddr))==SOCKET_ERROR) { cout<<"Connect active\n"<<endl; } if((ret=send(Connect,RecvBuff,strlen(RecvBuff),0))==SOCKET_ERROR) { cout<<"Error send"<<endl; cout<<WSAGetLastError()<<endl; break; } memset(RecvBuff,0,sizeof(RecvBuff)); ret=recv(Connect,RecvBuff,sizeof(RecvBuff),0); if(ret==SOCKET_ERROR) { cout<<"Conn sock error"<<endl; break; } if(ret==0) { cout<<"No pol send"<<endl; break; } RecvBuff[ret]='\0'; cout<<RecvBuff<<endl; if((ret=send(Client,RecvBuff,strlen(RecvBuff),0))==SOCKET_ERROR) { cout<<"Not to manage to send data"<<endl; break; } memset(RecvBuff,0,sizeof(RecvBuff)); } cout<<"Closed connected"<<endl; closesocket(Client); } cout<<"Closed server"<<endl; closesocket(Server); cin>>""; return(0); } //--------------------------------------------------------------------------- |
| Автор: Игрь 16.11.2006, 01:45 |
| Вообщем всё фишка в чём.... запускаешь прогу ,открываешь браузер и пишешь туда 127.0.0.1:4444 коннект браузера к проге....а прога потом шлёт запрос и выступает посредником между клиентом и реальным сервером.... Но картинкипочемуто не грузятся (((( |
| Автор: ptr 18.11.2006, 17:40 |
| Завтра посмотрю что там не так. Кстати не забывай пользоваться кнопкой "Код". |
| Автор: ptr 19.11.2006, 11:40 | ||||||
Наверное всё же IPPROTO_TCP.
Зачем повторяешь этот код два раза?
Не понял.
Тут скорее всего должен быть цикл. |
| Автор: Игрь 20.11.2006, 03:01 | ||||||
Наверное всё же IPPROTO_TCP.
Зачем повторяешь этот код два раза? ====================================== Сорри...просто копируя это дело на форум...я переборщил с Ctrl+V....и забыл затереть
Не понял. ========================================================== А это задержка, для того чтобы функция recv успевала подчерпнуть пришедшие даные, которые приходят с задержкой.. Может из-за асинхронного режима...хз Добавлено @ 03:09 Так вот и не понятно...почему хтмл код проходит,а гифы и джейпеги нет... выводит ошибку сокета...мол хотел получить данные,да не получилось((( Добавлено @ 03:14
Тут скорее всего должен быть цикл. ======================================== Зачем цикл , ведь буфер позволяет(своим размером) всё за один раз обработать...да кстати,огромное спасибо за твоё внимание... |
| Автор: En_t_end 20.11.2006, 06:43 | ||
нет |