Poslanie obsahu suboru cez socket v Perle

Sekcia: Programovanie 27.06.2018 | 11:27
Avatar ikaros   Návštevník

Ahojte,

snazim sa cez TCP socket z klienta pisanom v perli poslat obsah suboru na server pisanom v pythone. Posielam to ako "print $socket `cat $file`;". Problem mam ze mi to neposle tie data pokial za tym nenasleduje ukoncenie posiealnia pomocou "shutdown($socket, 1);" Nasledne za tym ide citanie dat zo socketu a potom zas posielanie. Takze obojsmerna komunikacia medzi klientom a serverom.

Pouzivam spatny sposob posielania dat? Pripadne je nejaky sposob ako dat socketu vediet ze som poslal vsetko. Cakal som ze sa oto postara EOF pri vypise cat.

Skusal som pouzit aj "$socket->send(`cat $file`)" ale to mi neslo, tusim som vyzral buffer. Samotne stringy mi idu len pri obsahu suboru mi to robi problem.

Ak by niekto vedel pomoct alebo aspon nasmerovat tak by bolo super.

Pekny den

    • RE: Poslanie obsahu suboru cez socket v Perle 27.06.2018 | 13:25
      Avatar marekz   Návštevník

      Podľa mňa sú sokety bezstavové a ty od nich chceš, aby vyhodnocovali nejaké stavy dát, prípadne riadiace znaky. Tipujem, že ti tam chýba nejaký parameter, ktorý konvertuje vstupný súbor na nejaký BLOB a tak ho pošle cez soket.

      Ináč sokety buď idú alebo nie. Vstupné dáta ich neriadia. To by padal celý internet. To musíš robiť ty a explicitne.

    • RE: Poslanie obsahu suboru cez socket v Perle 27.06.2018 | 15:15
      Avatar Miroslav Bendík Gentoo  Administrátor
      Pripadne je nejaky sposob ako dat socketu vediet ze som poslal vsetko.

      Socket nevie, či bude prijímať ešte ďalšie dáta. Ukončenie je možné signalizovať buď zatvorením socketu, alebo špeciálnou sekvenciou (napr. zero byte), alebo napríklad pred prenosom dát dať vedieť druhej strane veľkosť a až potom posielať dáta (preto má napríklad HTTP hlavičku content-length).

      • RE: Poslanie obsahu suboru cez socket v Perle 04.07.2018 | 15:34
        Avatar ikaros   Návštevník

        Dik za radu. Stacilo pridat na koniec spravy ukoncovaciu sekvenciu aby som vedel zistit na druhej sprave ze je koniec a mohol prerusit pocuvanie. Toto ma nanapadlo. Vlakno mozte prepnut na vyriesene.

        Dik ;)

        • RE: Poslanie obsahu suboru cez socket v Perle 04.07.2018 | 15:36
          Avatar ikaros   Návštevník

          Korekcie: sprave = strane ; nanapadlo = nenapadlo

    • RE: Poslanie obsahu suboru cez socket v Perle 27.06.2018 | 19:01
      Avatar WlaSaTy   Návštevník

      Akým štýlom tam teda riešiš spláchnutie toal.., pardon, potrubnej pošty? Existuje od toho buď príkaz flush, alebo príznak autoflush.

      • RE: Poslanie obsahu suboru cez socket v Perle 28.06.2018 | 21:42
        Avatar WlaSaTy   Návštevník

        A to odoslanie buffera sa v tom linku rieši podľa teba ako?

    • RE: Poslanie obsahu suboru cez socket v Perle 28.06.2018 | 23:57
      Avatar bedňa LegacyIce-antiX  Administrátor

      Pokiaľ reťazec prejde OK a súbor nie, tak bude problém v znakoch ktoré tam posielaš, napr. NULL byte a podobne, čo je koniec reťazca.

      Toto si musíš naštudovať.

      Táto správa neobsahuje vírus, pretože nepoužívam MS Windows. http://kernelultras.org
    • RE: Poslanie obsahu suboru cez socket v Perle 29.06.2018 | 13:53
      Avatar perl   Návštevník