abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 01:44 | Nová verze

    Byla vydána nová stabilní verze 8.2 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 152. Přehled novinek i s náhledy v příspěvku na blogu.

    Ladislav Hagara | Komentářů: 0
    včera 23:11 | Nová verze

    Byla vydána nová stabilní verze 4.0 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). S rozhraním přepsaným do Qt. Přehled novinek také na YouTube. Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:55 | IT novinky

    NVIDIA kupuje Hugging Face za 12,93 miliardy dolarů.

    Ladislav Hagara | Komentářů: 0
    včera 15:44 | IT novinky

    Předobjednat si lze nový jednodeskový počítač Arduino VENTUNO Q s předinstalovaným Ubuntu. S 16 GB LPDDR5 a 64 GB eMMC. Pro lokální LLM, agentní AI, počítačové vidění, robotiku…

    Ladislav Hagara | Komentářů: 0
    včera 13:00 | Zajímavý software

    Hexpair není nejlepší HEX editor na světě a ani se o to nesnaží. Zato je k dispozici kdykoliv a kdekoliv – všude tam, kde máte svůj Vim. Vznikl jako hobby projekt před pár měsíci a dospěl do stavu, kdy by mohl být užitečný širší komunitě. Přepnout do HEX režimu se dá i uprostřed rozdělané práce: Soubor, který už máte otevřený běžným vim file.md, jedním příkazem přepnete do HEX editoru a dalším příkazem ho můžete vrátit zpět do textu. Kurzor přitom

    … více »
    Cohen | Komentářů: 0
    včera 01:55 | Nasazení Linuxu

    CERN dlouhodobě používal vlastní sestavení RHEL, ze kterého přešel na CentOS Stream. Federico Vaga a Nikos Tsipinakis ale nyní v přednášce na MiniDebConf Winterthur 2026 popisují plán probíhajícího přechodu na Debian pro řízení akcelerátorů. Důvodem k opuštění CentOS Stream jsou zachování zpětné kompatibility se starším hardwarem, kterou Red Hat narušuje, když tlačí sestavení balíčků pro novější verze architektury (x86-64), a nedostatečné nástroje pro sestavování vlastních balíčků a repozitářů.

    |🇵🇸 | Komentářů: 10
    včera 01:44 | Nová verze

    UZDoom (Wikipedie), tj. fork GZDoom, byl vydán ve verzi 5.0.0. Videopředstavení na YouTube. Podrobný přehled novinek v Changelogu.

    Ladislav Hagara | Komentářů: 0
    2.9. 16:11 | Nová verze

    Příručka Linux From Scratch pro sestavení základního linuxového systému byla aktualizována v pravidelném půlročním termínu. Vydání 13.1 shrnuje přes 40 nových verzí balíčků a několik patchů. Navazující příručka Beyond Linux From Scratch s recepty pro sestavení dalších knihoven a aplikací zatím vydána nebyla, ačkoliv vývojová verze stále dostává aktualizace. Lze je číst online nebo stáhnout v HTML či PDF.

    |🇵🇸 | Komentářů: 0
    2.9. 12:44 | IT novinky

    Národní bezpečnostní tým CSIRT.CZ koordinovaný sdružením CZ.NIC přichází se službou Strážci internetu, která má sjednotit způsob hlášení doménových jmen zneužívaných k páchání trestné činnosti. Službu mohou uživatelé využívat také prostřednictvím rozšíření do prohlížeče. Nový nástroj podporuje jak hlášení vyžadující autorizaci, tak anonymní reporting, u kterého však nebude možné zapojit takovou míru automatizace jako u

    … více »
    Ladislav Hagara | Komentářů: 21
    2.9. 12:22 | Komunita

    Firefox pro iOS přichází s integrovaným blokováním reklam. Funkce je ve výchozím nastavení vypnutá a lze ji aktivovat v Settings > Browsing > Ad Blocker.

    Ladislav Hagara | Komentářů: 2
    Které desktopové prostředí na Linuxu používáte?
     (10%)
     (7%)
     (3%)
     (20%)
     (29%)
     (7%)
     (5%)
     (2%)
     (15%)
     (21%)
    Celkem 2560 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: TCP server pro vice klientu - nejjednodussi

    13.11.2016 22:35 petrfm | skóre: 23
    TCP server pro vice klientu - nejjednodussi
    Přečteno: 724×
    Ahoj, potreboval bych na serveru logovat nejake udaje od klientu, kteri by se pripojovali na port pomoci TCP protokolu a odeslali nejaka data. Nejdrive bych si s tim chtel jen tak pohrat, nez budu pridavat nejakou funkcionalitu a budu potrebovat i odesilat data, resp. odpovedi. Takze mi na to zatim staci treba netcat. Ale umi obslouzit jen jednoho klienta a to je malo i na testovani.

    Jde mi predevsim o to, sestavit spojeni a zalogovat udaje do souboru na serveru. Cili mi staci funkcionalita jako u netcatu, kdy si presmeruju STDOUT. Ale bez toho omezeni jednim klientem. Da se vlastne spustit vice instanci? asi ne, ze? ten server musi odbavovat ty klienty postupne, kdyz vsichni komunikuji pres jeden port, ze?

    Musim si na to napsat server treba v Ccku nebo to jde i jinak? Cckem nevladnu, trochu java a php, idealne kdyby na to existoval skriptik v bashi?

    Diky za tipy, P.
    fuck the cola, fuck the pizza, all you need is slivovitza

    Řešení dotazu:


    Odpovědi

    13.11.2016 23:40 NN
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Mohl by stacit xinetd jako tcp wrapper nad nejakym skriptem, nebo si napsat threading/forking server vlastni.
    14.11.2016 12:35 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Ano, pokud si člověk nechce psát vlastní implementaci, (x)inetd je nejjednodušší řešení.
    14.11.2016 16:50 srbt | skóre: 6
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Ovšem i ten script pod xinetd by měl řešit zamykání výstupního souboru - třeba pomocí flock.
    kozzi avatar 14.11.2016 00:13 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi

    Osobne bych se nebal zkusit nejakej framework. Ono neco takoveho naprogramovat je otazka nekolika vterin a par radku kodu, akorat bych asi volil neco jineho nez C, to dle toho co tvrdis by mohlo byt pro tebe zbytecne obtizne.

    Napriklad v Decku s vibe.d to vypada nejak takto:

    import vibe.d;
    
    shared static this() {
    	listenTCP(55555, toDelegate(&logMe));
    }
    
    void logMe(TCPConnection conn) {
        appendToFile("/tmp/nejakysoubor", conn.readAllUTF8());
    }
    
    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"
    14.11.2016 09:44 dword
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Pro ncat existuje prepinac:
    -k, --keep-open (Accept multiple connections) .
        Normally a listening server accepts only one connection and then quits when the
    connection is closed. This option makes it accept multiple simultaneous connections
    and wait for more connections after they have all been closed. It must be combined
    with --listen. In this mode there is no way for Ncat to know when its network input
    is finished, so it will keep running until interrupted. This also means that it will
    never close its output stream, so any program reading from Ncat and looking for
    end-of-file will also hang.
    
    14.11.2016 10:20 dword
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    jeste doplnim, ze se jedna o ncat z baliku nmap
    pavlix avatar 14.11.2016 10:17 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Low-level věci se dobře píšou v C nebo v Pythonu, ale chce to trochu zkušeností, takže to chvíli trvá, když je člověk nabírá až v rámci toho. Jinak ideálně inetd/xinetd, jak už tady padlo, to dělá přesně co ten netcat, akorát na úrovni systémové služby.

    Nebo přímo ručně spustit ten netcat, viz níže.
    nc --listen --port=PORT --exec=CMD --continuous
    
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 14.11.2016 10:18 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    (Obdobně pro jiné varianty netcatu.)
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    14.11.2016 16:36 srbt | skóre: 6
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Použitelný příklad v pythonu je: http://stackoverflow.com/questions/23828264/how-to-make-a-simple-multithreaded-socket-server-in-python-that-remembers-client

    Funguje jako echo - co dostane, to pošle klientovi zpět. stačí tedy řádky:
    response = data
    client.send(response)
    
    nahradit za:
    with open('logfile.log', 'a') as log:
      log.write(data)
    
    Může nastat problém se současným zápisem do souboru z více vláken - dá se řešit zámkem, nebo pomocí fronty. Rychlejší, ale komplikovanější řešení s frontou je http://stackoverflow.com/questions/11983938/python-appending-to-same-file-from-multiple-threads

    příklad se zámky by do __init__ přidal
    self.lock = threading.Lock()
    
    a zápis by pak vypadal:
    self.lock.acquire()
    with open('logfile.log', 'a') as log:
      log.write(data)
    self.lock.release()
    
    pavlix avatar 14.11.2016 19:11 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Úplně nevím, jestli by se mi chtělo řešit vlákna, když to nic nepřínáší.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    15.11.2016 08:27 srbt | skóre: 6
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Vlákna přináší to:
    Ale bez toho omezeni jednim klientem. Da se vlastne spustit vice instanci?
    Aby mohl paralelně odbavit několik klientů. Předpokládám (jen předpokládám, netvrdím že je to opravdu situace tazatele), že se k serveru má připojit několik klientů a posílat mu nějaká data, která chtějí ukládat do souboru.

    Pokud by se klient jen připojil, poslal data a odpojil, tak stačí nc -k.

    Pokud však klient data nějak získává postupně a chce je zapisovat průběžně, potřebuje server vlákna aby obsloužil několik klientů najednou.
    pavlix avatar 15.11.2016 08:38 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Nemyslím si, že by k tomu byly potřeba vlákna.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    15.11.2016 09:02 srbt | skóre: 6
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    To je jistě stručná a výstižná odpověď... a jistě inspirativní (protože mi připomněla, že to jde i forkem), přesto - nešlo by to pojmout nějak šířeji?
    15.11.2016 09:11 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi

    Ani to není úplně nutné. Pokud klientů (a provozu od nich) není moc a zpracování požadavku netrvá moc dlouho, vystačíte i s jednou smyčkou a poll() (případně epoll() nebo pro tradicionalisty select()).

    Jak se konkrétně ty tři varianty (fork, thready, poll/select) implementují, na to jsou na webu hromady příkladů, takže není potřeba to znovu podrobně popisovat.

    pavlix avatar 15.11.2016 10:25 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Přesně jak říká Michal, těch možností je hromada. Server může přijímat spojení fungovat v jediném vlákně jediného procesu. Nebo ve více vláknech. Nebo ve více procesech po jednom nebo více vláknech. Nebo nemusíš psát TCP server vůbec a můžeš použít ten netcat tak, jak už jsem v diskuzi popsal, a server napsat jen jako stdin/stdout filter. Všechny možnosti se jistě dají najít na internetu.

    Podstata mého sdělení je v tom, že je práce s vlákny podstatně náročnější, zvlášť když se pak v tom máš vrtat v debuggeru. Můj názor je, že by se měla vlákna používat pouze tam, kde je pro to opravdu dobrý důvod. A u programu v Pythonu se ten důvod hledá o dost hůře než třeba u programu v céčku.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    15.11.2016 09:07 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Pokud však klient data nějak získává postupně a chce je zapisovat průběžně, potřebuje server vlákna aby obsloužil několik klientů najednou.

    Dřív, než se problém začne řešit, je potřeba ho nejdřív co nejpřesněji formulovat. Dokud je jeden klient a jedno TCP spojení, je celkem jasné, co znamená zapisovat data z něj do logu. Jakmile mám do jednoho logu zapisovat streamy od několika současně připojených klientů, je potřeba si ujasnit požadavky na to, jak má ten výstup vypadat, protože kvůli bufferování může být výsledek dost divoký.

    V praxi nejspíš budeme požadovat, že ve výstupním souboru musí být všechno, co přijde od klientů (což není tak samozřejmé, jak se na první pohled zdá). Kromě toho si typicky definujeme minimální "větu", která musí být ve výsledném souboru zapsaná tak, že nebude přerušená jiným textem. U textového logu to může být třeba řádek, ale dokážu si představit, že někdy může být požadavkem, že záznam skládající se z několika řádků má být pohromadě. Takže je potřeba definovat, jak se pozná "věta", a následně zajistit, aby se zápisy jednotlivých vět serializovaly.

    Fuky avatar 14.11.2016 19:57 Fuky | skóre: 52 | blog: 4u
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Příloha:
    V příloze máš nastíněné jedno z možných řešení v Pythonu. Je to ukázka z Python SocketServer.
    14.11.2016 21:26 petrfm | skóre: 23
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi
    Diky moc za odpovedi, neco z toho urcite vyzkousim. Jeste mi neni jasna jedna vec. Jak to vlastne funguje? Co, nebo kdo vlastne resi prirazeni socketu k jednotlivym klientum?

    V systemu je otevren jeden jediny port a na nej se pripoji soucasne treba 10 klientu. To resi kernel, ze seradi jednotlive pozadavky od klientu do fronty a postupne to predava scriptu, ktery nasloucha na danem portu? A skript si sahne na port a dostane paket s oznacenim odesilatele, podle ktereho pozna, ktery paket ma priradit ke kteremu socketu?
    fuck the cola, fuck the pizza, all you need is slivovitza
    kozzi avatar 14.11.2016 22:58 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
    Rozbalit Rozbalit vše Re: TCP server pro vice klientu - nejjednodussi

    jj, predstav si to jako postu, nekolik lidi ti puse na tvou adresu coz je vlastne ip + port, no a ty jim odpovidas na zpet dle zpetne adresy coz je zase ip + port

    Linux je jako mušketýři "jeden za všechny, všichni za jednoho"

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.