Как в Buildere при работе с idHTTP1 избавится от ошибки EIdsocketerror #10054 А ещё лучше скажите как сделать чтоб при поевлении любой ошибки оно писало что произошла ошибка и продлжоло работу дальше, а не завергало приложение.
Подскажите пжалста. Как получить картинку с сервера? делаю следующее... Code: char url[] = "/i/switch-yaru.png";char host[] = "img.yandex.ru"; sprintf( request, "GET %s HTTP/1.1\r\nAccept: image/png, image/gif\r\nHost: %s\r\n User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\nConnection: Close\r\n\r\n", url, host ); send( s, request, strlen( request ), 0 ); recv( s, response, 1024*32, 0); В результате получаю ответ сервера: Code: HTTP/1.1 200 OK Connection: close Expires: Tue, 22 Apr 2008 15:56:59 GMT Cache-Control: max-age=5184000 Content-Type: image/png Accept-Ranges: bytes ETag: "490032732" Last-Modified: Fri, 27 Jul 2007 11:27:33 GMT Content-Length: 296 Date: Fri, 22 Feb 2008 15:56:59 GMT Server: lighttpd/1.4.18 ???Как получить саму PNG'ку???
во-первых ты неправильно используешь функцию recv. Здесь лучше было бы принимать данные в цикле пока сервер не закроет соединение. Картинка будет идти сразу после заголовка http-ответа(конец ответа легко определить по последовательности \x0D\x0A\x0D\x0A) если же лень писать правильно то после получения заголовка можешь просто вызвать recv( s, response, 1024*32, 0); еще раз, на этот раз там будет картинка
у меня такая проблема : передаю проге в командной строке IP адрес,допустим 127.0.0.1,но когда начинаю заполнять структуру sockaddr_in, то оказывается что адрес равен 27.0.0.1, куда делся первый символ? З.Ы. строка вида "proga 127.0.0.1 param1 param2"
В этом и проблема. Response содержит 5 символов, при весе картинки 2Кб. После второго вызова делаю: Code: ofstream f_gif; f_gif.open("1.gif", ios::binary); f_gif<<response; f_gif.close(); ???Или записывать в файл put'ом???
не. ну почему все перешли на этот си++? хз какая хрень.. делай recv в цикле. насколько я знаю функция возвращяет сколько байтов она прочитала. получается так. while (bytes=recv(s, response, 1024)>0) { d=open("file", O_RDRW); write(d, response, bytes); } так по идее должно получится
... да потому что такими циклами самими по себе не сделать мало мальски хорошую программу, всем приходится привыкать к реалиям мастдая. Если цикл значит новая нитка(thread).... далее по Рихтеру и С++ а если не нитка а асинхронные сокеты, то далее по Win32socket.faq и С++!
Ламерский вопрос по С++ (Borland Turbo C++) Возникает событие во второй форме (Unit2.cpp), как заставить выполнятся код, который находится в первой форме (Unit1.cpp) (функцию ну или другое событие). (Думал создать невидимый чекбокс и нажимать его - но это как-то не правильно)
сделать функцию в первой форме и при возникновении событии во второй форме вызывать эту функцию? вначале сделай хидер Unit1.h там опиши функцию, потом имплементацию функции в Unit1.cpp. дальше инклуди Unit1.h в Unit1.cpp и Unit2.cpp и при событии вызывай ф-цию из Unit1.cpp. посмотрим что произойдет. несколько абстрактный пример Unit1.h Code: int event_handler(int arg); Uni1.cpp Code: #include "Unit1.h" int event_handler(int arg); { ... } Unit2.cpp Code: #include "Unit1.h" int main(int argc, char *argv[]) { ... if(event) { event_handler(event); }; ... }
Я что-то протупил. Так пробовал (не работало) - решил еще раз сделать чтобы конкретно сказать что говорит компилятор (интуитивно догадываюсь, но хотелось бы уточнить.. ). В общем заработало. (черт его знает - видимо была опечатка)
Занимаюсь С++, не могу понять в чем ошибка? Программа должна считать ср. арифм. 2-х чисел (переменной - а, и переменной - b) Вот иходник: Code: #include <iostream.h> void main () { int a; cout<<"vvedite pervoe chislo\n"; cin>>a; int b; cout<<"vvedite vtoroe chislo\n"; cin>>b; int c; c=(a+b)/2; cout<<"srednee arifmeticheskoe="<<c;cout"\n"; } Компилятор Visual C++ 6.0 выдает ошибку: "c:\program files\microsoft visual studio\myprojects\dz\srednee_arifmeticheskoe_dvuh_chisel\source.cpp(13) : error C2143: syntax error : missing ';' before 'string' Error executing cl.exe."
symbioin тут ты ответа на этот вопрос не найдешь. никто не может написать СКРИПТ на си/си++ ибо не существует интерпретатора языка си. во вторых ты не можешь СОЗДАТЬ md5. ты можешь сгенерировать md5 хеш. в третиьх. я не знаю ((*
В документации к используемым фреймворкам/библиотекам либо в документации ОС, если не используются библиотеки и фреймворки.
Непонятен вопрос..... а что там читать ??? Там не пахнет никакими семафорами и другими средствами синхронизации. Сокет понятие уникальное для сессии. На каждый поток обычно уникальный сокет.... то есть нитка не видит что сокетов много , у нее он СВОЙ. ..... есть только один вариант в который СТРАШНО верить потоков много а сокет один, неужели ты это имел ввиду??? Но насколько я знаю винсокдлл.... она все запросы вси рафно ставит в очередь.... коллизий в ней не будет. Критические секции тоже не стоит ставить на recv и send для одного "глобального" сокета.... для систем с вытесняющей многозадачностью эти команды не разбиваются на составные части.... а выполняются как ОДНО-ЦЕЛОЕ, то есть все равно ктото будет первым а ктото вторым!
Добрый день, начал изучение с++, но появился очень простой вопрос, на который, к сожалению, в гугле одназначно ответить не могут... Вопрос такой: "Где лучше прописыватть методы класса, в нем или вне его?" Вроде удобнее первый, но так нигде не пишут . Спасибо за внимание, уделенное моему вопросу.
пишут и так и так встречал оба варианта.... поэтому как нравится.... вот к примеру мне не нраивтся ООП ваапще.... дык я и не "кашляю" даже 8)))) ... доходит до смешного, если мну нужен код.... я выдираю из классов и делаю понятные только мне функции и структуры