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
Poslanie obsahu suboru cez socket v Perle
Pre pridávanie komentárov sa musíte prihlásiť.
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.
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).
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 ;)
Korekcie: sprave = strane ; nanapadlo = nenapadlo
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.
https://stackoverflow.com/questions/40915269/in-perl-socket-programming-how-to-send-a-data-from-client-and-receive-it-from-se?answertab=votes#tab-top
A to odoslanie buffera sa v tom linku rieši podľa teba ako?
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ť.
Musis predat i velkost.
Vid. https://www.programering.com/a/MDNzETMwATg.html