Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.03.2013, 19:34
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию ClientSocket & TThread

Короче, стою на асфальте в лыжи обутый...
Дело в том что пишу клиент под ip-камеры axis, вот уперся в такой момент, если запускать клиент-сокет в главном потоке, то в событии онРид я могу получать кадры, а если выносить сокет в "дочерний" поток то событие просто напросто не происходит... моя фантазия иссякла, гугл особо помочь не смог, одна надежда на Вас друзья!
ЗЫ: Торжественно обещаю выложить исходник)))
Ответить с цитированием
  #2  
Старый 28.03.2013, 19:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

а зачем асинхронный сокет использовать в потоке? используй синхронный.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 28.03.2013, 20:11
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

да пробовал, только под синхронный как-то с получением кадров не очень срослось... в асинхроне способа нет?
Ответить с цитированием
  #4  
Старый 28.03.2013, 20:38
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

асинхронный, т.е. неблокируемый сокет, не ожидает завершения операции. следовательно для него не нужен отдельный поток.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 29.03.2013, 12:30
Janom Janom вне форума
Начинающий
 
Регистрация: 04.02.2011
Адрес: Москва
Сообщения: 148
Версия Delphi: 7
Репутация: 133
По умолчанию

Ладно, с этим ясно, на WinSock API реализовал... только теперь такая лажа: Exception class EJPEG with message "JPEG error #53" никак не пойму где косяк, данные вроде полные собираю... Вот черновик всего этого безобразия
Код:
procedure TForm1.Button1Click(Sender: TObject);
Const
  C_WORD:Cardinal = 65536;
var
  sock: TSocket;
  buf: array [0..65535] of Char;
  tmp,S: String;
  RcvLen: Integer;
  host: PHostEnt;
  addr: sockaddr_in;
  ip: pInteger;
  d: WSAData;
  Start,Finish:Cardinal;
  Jpg:TJpegImage;
  f:boolean;
  mem:tmemorystream;
  z:cardinal;
  sX:Cardinal;
begin
  mem:=tmemorystream.Create; //nicaa?i iioie
  jpg:=tjpegimage.create; //nicaa?i eaa?
  f:=false; // Aiiieieoaeuiue oeaa
  z:=100;//High(Z);
  WSAStartup($0101, d);
  //
  sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
  //
  host := gethostbyname('192.168.0.90');
  ip := pInteger(host.h_addr_list^);
  //
  addr.sin_family := AF_INET;
  addr.sin_port := htons(80);
  addr.sin_addr.S_addr := ip^;
  //
  connect(sock, addr, sizeof(addr));
  //
  tmp := 'GET /mjpg/video.mjpg HTTP/1.1'+#13+#10+'Authorization: Basic ' + encodestring('admin:admin')+#13+#10+#13+#10;
  send(sock, tmp[1], length(tmp), 0);
  tmp := '';
  //
  ZeroMemory(@buf, C_WORD);
  RcvLen := recv(Sock, buf, C_WORD, 0);
  while RcvLen > 0 do begin
    //
    Tmp := Tmp + Copy(buf, 0, RcvLen);
    RcvLen  := recv(sock, buf, C_WORD, 0);
    s:='';
    start:=pos('яШяа',tmp);//FFD8
    if start>0 then
      begin
        if start>1 then delete(tmp,1,start-1);
        finish:=pos('--myboundary',tmp);
        if finish>0 then
          begin
            s:=Copy(tmp,1,finish-1);
            delete(tmp,1,finish+5);
            //if length(s)<5 then s:='';
          end;
      end;
    if s<>'' then
      begin
        mem.Clear;
        mem.Write(s[1],length(s)); 
        mem.Position := 0;
        jpg.LoadFromStream(mem);
        Image.Canvas.Lock;
          try
            application.processmessages;
            Image.Picture.Bitmap.assign(JPG); 
          finally
            Image.Canvas.Unlock;
          end;
      end;
    dec(z);
    if z=0 then break;
  end;
  Memo1.Text := Tmp;
  WSACleanup();
  mem.Free;
  jpg.Free;
end;
А вот что приходит:
Цитата:
HTTP/1.0 200 OK
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Dec 1994 16:00:00 GMT
Connection: close
Content-Type: multipart/x-mixed-replace; boundary=--myboundary

--myboundary
Content-Type: image/jpeg
Content-Length: 36001

яШяагµ ЈК“О:8цх«D{SH Ћ
№ЬqHW#ЎлIUЊy§ёфь*VO§4X.EґзщSJсАвҐЫЖz
k^¬3Hdd{PGCлNЮЭGo~‚“l¤зеOЦђ
уТЎ‘вБ\дћЛЙ©ј•nXіяhoЭђI%Пvfфх4нBъ*Аhє42\>v¶М™П \џRz“Ђ=ЂЁ·§†н$…[ПФоф8fъћХ–HQЃАЕuBЉЋіыЊ'W°Л‰¤ёї3МЫ¤dБ>Ща}*&9Н s?_аО‘?--myboundary
Content-Type: image/jpeg
Content-Length: 35944

яШяаt#$vЈ(PHҐ U’D*ҐУ/рИ2>їз50лТўџ(^~F--myboundary
Content-Type: image/jpeg
Content-Length: 35951

яШяаЙ!AІй—ґѓ#люsSwйQO” /?# э?Оjr--myboundary
Content-Type: image/jpeg
Content-Length: 35997

яШяа* ‘·jђguЄЪФжЩ?xтGђJCЭ#г®rk3Liо®…ёЌA;’в2Њ1мjЉK KќЙЈ
$S±х«$Ѓ2·LЈоИ2>їз5?~•щ@’Џб`?я--myboundary
Content-Type: image/jpeg
Content-Length: 35958

яШяаЂNф№ЊЈ {‡%rТV№РЊћ?Ј(POjv>µd*)tЛЏ–A‘хя--myboundary
Content-Type: image/jpeg
Content-Length: 35997

яШяаjџјwЏ ”†5Э#г®rk3Liо§V s‚w%ДecШФ9jRJЧ:“F8МЊcp?/дjмЅeTБ-чy?ЌAдr3/+µЩ9 дѓѓЊuµ“2‹еФ}¤іНЅН·Щжю(ГоиjqЫЉfiAsZ#7Ё;n‘c»ЏР tэjaЪ«Дw”я--myboundary
Content-Type: image/jpeg
Content-Length: 35965

яШяа¦4чW
UncPNдёЊЈ }jµІ)-.t#4cҐ ’)Д}jЙ!@Vе—ґѓ?ЏщНMЯ§µE>SdЈшфяL?\KmFиm†¦х>зЅmЕ ѕ‡¦Й=Гтщ¤П,З°ьx)8кЉеж+и:э¦№§‹?Эc•ЙЎfГFгЁ#µjхп^ m,тi—)«йп%ЙыL2Їп$Lсё7Чс®ЫOЦ*/!VOђчB0ET*ћ±3ХdfЄM“'љ>г}си}je№„я--myboundary
Content-Type: image/jpeg
Content-Length: 36015

яШяаЮ“h9лE‡r6г“Т*iqЕVЦ§6©ыЗ’<‚RЖйp&і4ЖћкбX-Дj Ю—”aЏcPд®RZ\иF}ЁЗJ)Hхd‘ )tЛь2 ЏЇщНMЯ¦;TSеJ?Ѓ‡еюsSђ'ЃЧ“LгЪќЏj`|я--myboundary
Content-Type: image/jpeg
Content-Length: 35807

яШяаAiщд;w'и;Ч"M»#їbZНФ5?*7G
‰¦uщTыя--myboundary
Content-Type: image/jpeg
Content-Length: 35935

яШяа$t4ёd ЩrЛЩЖGЧьж¦пТўџ(_о0ьїОjr--myboundary
Content-Type: image/jpeg
Content-Length: 35968

яШяачW
Бn#PNдёЊЈАФ9-‹IZзB3F8.Hв>µd )tЛЏ–AџЗьж§пйQO”Щ/чфя--myboundary
Content-Type: image/jpeg
Content-Length: 35944

яШяаЏ*Y(6\°мг?ЏщНN:фЁ§Кl—ыЊъњФдПAх¦!ёаqNБф¦Пъ µ,}O—fв|ЖЭм:Ryѓ8Aјыt§Ьrз>Љ8ёэ)GH–MБРi*єЙ} ?ЉзUЂ=koE“t2Ўюуя--myboundary
Content-Type: image/jpeg
Content-Length: 35871

яШяа"п>Э8&г—9я--myboundary
Content-Type: image/jpeg
Content-Length: 35910

яШяаГ ПгюsScџJЉ|¦ЙF~F—щНN@ћЦ?†цSЂлЕ3~пхj[Ьр(Щёџ1·{” _0o>Э8&г—9фQАЈ…Ћ7A«WсЇ6–i4Л”Ц4ч’е†~У «ыЙ<nЌгЫЇг]¶џ¬Ъ^B>CЭБR‚zД‡Ў¤EUљ/&O4}ЖыгРъФЛu tqN2ДГЃJ…xЅ‰i=?1лQ”Бь*ExСј¦?/рћ*RРзп~†ЇS=JеqйщPWг2щmРшR2®~лВЄбr3АЁщVПXум jfз¤MHКЕqе жя--myboundary
Content-Type: image/jpeg
Content-Length: 36009

яШяа@х4mП* ‘±АЙйP4Ј8в«kS›UэгИ™¤1ЊЙ&:бG&і4ЖћкбH[?Ф№.#(ГЖЎЙ\¤ґ№РЊљ1Т…в”ЃпVI
—LїГ ПгюsScћ?Ё§К”gд`?уљњЂ9и>ґД78§нLџхjXъћ7ж6пnФ _0o>Ј*§,rьъ(аP°«МЇэР;ъ~tЛЭ2VЉ+{)™µ{--myboundary
Content-Type: image/jpeg
Content-Length: 35943

яШяаЮ—”aЏcPеР¤•®t#йF:P*‘JGЦ¬’$.™{H3шях№ vъ›$чИжђufфИP¤г©\јЕ}_ґЧ4сq,R!),,pСёк=+WсжТ Н&™rљЖџ$—,ыL2/п$Lсё7йњю5ЫiъНҐЬ!“д=РЊU('¬HwF‘\ХYўтdуWо1щЗ§ЅL·P ћЋ?*q–&Ь>Х ™=‰it hЕFSр©гFт?ќїВyь©KCћїЎ«ФПR№^1ЕЖx©—Лn™?… ЁВџКЄбr№ћ)‡(Щю<ы?ъ?юTЊ¬TЏ(`рw7я--myboundary
Content-Type: image/jpeg
Content-Length: 35892

яШяаъS7оя--myboundary
Content-Type: image/jpeg
Content-Length: 35920

яШяаGЧьж§БПLTSеKПИГ?NяХЛrѕѓЇЪkљxћ6XҐF1Н 4n:‚;VЇг^m$Тi—)¬iтKrАґГ"ютDПЂгpйњю5ЫiъХҐд!“д=Р ЊU('пD‡tiљ«4^Lћhя--myboundary
Content-Type: image/jpeg
Content-Length: 35972

яШяаћкбH[?ФЅ.#(ГЖЎЙ\ґ•®t#4cЃBдЉRЅYH6\Ія--myboundary
Content-Type: image/jpeg
Content-Length: 35954

яШяаqFц5Z”’µО„fЊtЎA=iHъХ’BЂҐЛ.8ђgся--myboundary
Content-Type: image/jpeg
Content-Length: 35985

яШяагЉ**\TэгєdђЖ№‘сЧ
95™¦4чW
Бn#PNфёЊЈАФ9jRZ\иFhЗ…Ћфв>µdђ*)tЛь2 ю?з569йЉЉ|*IyщXgйюsSђ$р>ґАn=©АJ`|эАXъћ7¬mЮЭЁ wѓДcyцйN »—9фQАЈ--myboundary
Content-Type: image/jpeg
Content-Length: 36015

яШяаpqO#ЬТmОzСaЬЌєr*ђgUmjslџјwЏ ”†0ZGЗ\(дЦf?УЭ\+ёЌA;Тв2Њ1мj•мU•®t#4cҐ
ѓN"¬’К]2геђd}Оj|sУщ@’ут0йюsSђ'Ѓх¦qнNЭW™_ы*vфьк;Э2V Љ;{)Щµ{--myboundary
Content-Type: image/jpeg
Content-Length: 35989

яШяаО8лUµ©НЄ~сЮ<‚RФґЏЋёQЙ¬Н1§єёV s‚wҐМecЪЎЛRТV№РЊыQЋ”.H§х« …K¦_бђgся--myboundary
Content-Type: image/jpeg
Content-Length: 35990

яШяашл…љМУвкбHЁ'r\FQ†=Є•КKKќНйB‚E.ЅY$H6]2цђgсятсЙЏ=З8зµYУн¦УbД[Qєa‡ј+ЬџцЏzЫ†;}M’{‡д
УIЭ‰м?ђЎI*Jеж+и:э¦№§‰гeЉT;&…Ћ7A«WЇzуi&“LєM_O’K– ыL2/п$Lсё7lзхЫiъХҐд!“д=ФЊU('¬HzdfЄM“'љ>гњz{ФЛu SЊ±0#p#ЅBж‹Ш–“ШЂД*2??…HЇmе1щЂущR–‡=CW©ћҐrјcЉ6 г'2щmРшR2Ё<)5W ђ‘њQrЌћ6±зШФзћ‘1Зµ#+#К<Ня--myboundary
Content-Type: image/jpeg
Content-Length: 35975

яШяаµOЮ<‰ђJCЭ$?л…љМУ{›…e[?ФЅ.#(ГЖЎЛR¬*sЎ?ЌаP№"њGЦ¬’.™@вAџЗьж§пQO”Щ(ю ъњФдЙа}i?n:qNЇНщя--myboundary
Content-Type: image/jpeg
Content-Length: 35982

яШяа›TэгєdђЖ ‘сЧ
95™¦4чW
К·Ё'r\FQ†=ЌG2Ѕ‹KKќЙЈ(PHпJGЦ¬‚$.™†A‘хя--myboundary
Content-Type: image/jpeg
Content-Length: 35944

яШяаdьОjaЧУµE>P$Г?#Льж§ “Ач4Д7t§¤ЦЁ«\Ї*лцљжћ.#uЉT;&…Ћ7A«WсЇ6’i4Л”Хфч’ е†~У «ыЙ<nЌГЫ9ЗЅvЪ~µiydщ9B0ETЎ}bCє4ИНT–/&O5~г}сйпS-Ф-ьcт§baЌАѓнP№—BZ]1лLdюTхxгc—шO?•+<$хэ
^¦z•КсЋ(ЫЊсщTЛе·@OбHк№б[тЄё\„Њр*.Qі‘µЏ>Ж¬zDЖљБЉ‘е
§ѓ–я--myboundary
Content-Type: image/jpeg
Content-Length: 35993

яШяа$?л…љМУ{«…!n#PNфёЊЈ {ЋdRZ\иFNzsF:P№#їбJ@ч«$‰K–_бqџЗьж¦пУщ@’ЊьЊбЯъ ФдПAх¦!ЅєSЂ=qLЯ»эZ–ч<
6nЙ‘·{” _0o>Ј*§Ьrз>Ђp(Аг¬yо9З=ЄОџm.›№–"ЪЌРЫ =б_Sо{ЦЬQЫиzl“Ь? nљLтМ{ЗЃB“ЋЁ|·+и:э¦№§‹?ШE*1IЎc†ЌЗPGjХьkНҐ™фЛ”Хфч’ еЂ?i†Eэд‰ћ7ЖбП®нґэjТтSд=РЊbЄPOXђоЌ"*¬±y2yЈэ[}сйпS-Ф-СЗеNу"aЌАѓнP№—BZObЊTe1R+З?ьїВҐ)hsчїCW©ћҐrёї*6 г<TЛе·LџВ‘•AОТ
«…ИH$а‹”bxЪЗџcSћzDЖ‘ѓЗ”0x;›я--myboundary
Content-Type: image/jpeg
Content-Length: 35970

яШяао‘сЧ
95™¦4чW
BЬF*ќйqFц5Jц--.t#&ЊtЎrE)х« ‰Л¦_бђgся°_—Ћ±зёзХќ>Ъm2!q,EµЎ¶{ВѕюзЅmГѕ‡¦Й=Гт щ¤П,З°ьx)8кЉQж+и:э®№§‹„aЁvM њ4n:‚;VЇг^m$Тi—)¬iп%Л--myboundary
Content-Type: image/jpeg
Content-Length: 36029

яШяаА§JѕLЛ/р±ГT¤c<гљ,+‘
8P)p@§ђ=M&Р}h°оFЖ*iqЗZ**Nm“чЏ$y¤1©ip&і4ЖёєёV q‚wҐДecШФ9kЎVV№РЊСЋ”('Ц”ЏЁв¬’$.™qтИ3шяСМ¤6©p™ђ ѓџ%;(чюї…Ќ»Щ¦Z
*ФэўжvwUжWюиЂэ?:eо™+Esіjц--myboundary
Content-Type: image/jpeg
Content-Length: 35988

яШяађgUmjsjџјwL‚RФ™pЈ“YљcOup¬ж5пK?К0З±ЁrЦЕ$ *s*ж—(PHҐЗЦ¬’.YqтИ3шя--myboundary
Content-Type: image/jpeg
Content-Length: 35965

яШяаcOup¤ ?ФЅ.#(ГЖЎЛ[–—:љ1Т…Й¤zІHђlєeюуљ?uйQO” (qЂь?ОjrОџm6›ё–"ЪЌРЫ =L+к}ПzЫ†;}M’{†д
УH,Юѓщ
њu+—?Ї*лцљжћ.#aЁЕ&…О7AҐjхо+Н¤™фЛ”Хфщ$№ ґГ*ютDПЂгpцлшЧm§лV—pOђг”#UJ лС¤EUљ/&O5~г}сйпS-Ф-СЕ8Л nj…Н±-+h@СЉaLt§«ЗyL~_б<юT¬Р“чїCW©ћҐ}јvЈn3ЕLѕ[tюЊЄv“шU\.BA<T_qЙгk}ЌX>С7ЦV*G”0zеїъХIЃ9Е!_Вњ »ЃШШИќGзKЋД“ф§p" у“Н7iдTЗo?)ьM0…Ищт§p!8№>фТFю9'УЪљ~†‹еYўypT lt9F<уJѕdЁ:Ё9 И=ъФЗ"ЎaдК_ўH~ocШС`ёБ?3ъљ6ЄзjЊэ*LsЗjn:Q`ёВ*&=й зйMЖ+г0}ї*Nr)дu$~cрн@\…г!SЯҐ2"Z,7ЮN
X#ЋzT/•8“+ь*м{R Џ#'ЦЊzS?ЗQH@зґ--myboundary
Content-Type: image/jpeg
Content-Length: 35934

яШяа-JKKќО(ЗJ)H«$…K¦^Т ю?з5>9йQO”Щ/?#Льж§ OлLCqнNЗ^)›ую*KSАҐЩ»эcnц(yЂрѓyцйJ±Лњъ(аRа--myboundary
Content-Type: image/jpeg
Content-Length: 36039

яШяаJAуE‚дJЃG
.)дzM*з* ‘·E@Т гЉ**NmSчЋйђJC-$?л…љМУ{«…`·Ё'z\FQ†=ЌC’ѕ…¤*sЎЈ(\‘ТњWлVA

—LЅ¤ьОjaЧТўџ)І_о°‡щНN@'ЃЧ“LC
pТ™їwъµ-оxlЬO?ЫЅ‡J/™ћn>ЈҐ;fг—9яхь)6пf—h4«_ф‹™Ш ЭW™_ы*vУ·зLЅУ%hў‚КvmbА c`№^:ЗћгњsЪ¬йцУi‘ ‰b-ЁЭ.Шaп
ч'эЈЮ¶вЋЯCУdћбЖ@Э4™е?ц‰АЎI*Q\·+и:э¦№§‹?ШE"“BЗ
Ћ*ЋХ«шЧ›I4љeТjъ|’Ь°н0Hїј‘3Жа8Ь9ъю5ЫiъХҐд!“д=РЋET Ў}bCРУ#5RXј™<СчпЏOz™nЎ=SЊ±0ЖаAцЁWObZOb?{Te*Exгo )ЏЛьџК”ј9ыЯЎ«ФПR№^1FЬgЉ™|¶а
F ћЄ® ћ*3”|я--myboundary
Content-Type: image/jpeg
Content-Length: 36026


Последний раз редактировалось Janom, 29.03.2013 в 12:45.
Ответить с цитированием
  #6  
Старый 27.04.2013, 11:56
ProDaNTe ProDaNTe вне форума
Новичок
 
Регистрация: 25.12.2011
Сообщения: 75
Репутация: 10
По умолчанию

Извени может я не правильно понял, но почему закачка идет не в цикле, то есть идет запрос только на 1 блок данных?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:31.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter