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 17:11 | Nová verze

    Byla vydána nová verze 9.20 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání. Vypíchnout lze například nový balíček RustDesk Server pro vzdálený přístup.

    Ladislav Hagara | Komentářů: 0
    dnes 14:44 | Nová verze

    Jonathan Thomas oznámil vydání nové verze 3.4.0 video editoru OpenShot (Wikipedie). Představení novinek také na YouTube. Zdrojové kódy OpenShotu jsou k dispozici na GitHubu. Ke stažení je i balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit.

    Ladislav Hagara | Komentářů: 0
    dnes 14:22 | Nová verze

    Byla vydána nová verze 1.6 otevřeného, licenčními poplatky nezatíženého, univerzálního ztrátového formátu komprese zvuku Opus (Wikipedie) a jeho referenční implementace libopus. Podrobnosti na demo stránce.

    Ladislav Hagara | Komentářů: 2
    dnes 01:33 | Komunita

    Vojtěch Polášek představil Vojtux, tj. linuxovou distribuci pro zrakově postižené uživatele. Vychází ze spinu Fedory 43 s desktopovým prostředím MATE. Konečným cílem je, aby žádný Vojtux nebyl potřeba a požadovaná vylepšení se dostala do upstreamu.

    Ladislav Hagara | Komentářů: 10
    dnes 00:33 | Nová verze

    Byla vydána (Mastodon, 𝕏) druhá RC verze GIMPu 3.2. Přehled novinek v oznámení o vydání. Podrobně v souboru NEWS na GitLabu.

    Ladislav Hagara | Komentářů: 0
    včera 15:22 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 160 (pdf).

    Ladislav Hagara | Komentářů: 0
    včera 14:11 | IT novinky

    Izrael od února zakáže dětem používat v prostorách základních škol mobilní telefony. Podle agentury AFP to uvedlo izraelské ministerstvo školství, které zdůraznilo negativní dopady, které na žactvo používání telefonů má. Izrael se tímto krokem přidává k rostoucímu počtu zemí, které dětem ve vzdělávacích zařízeních přístup k telefonům omezují.

    Ladislav Hagara | Komentářů: 31
    včera 14:00 | IT novinky

    Internetová společnost Google ze skupiny Alphabet pravděpodobně dostane příští rok pokutu od Evropské komise za nedostatečné dodržování pravidel proti upřednostňování vlastních služeb a produktů ve výsledcích vyhledávání. V březnu EK obvinila Google, že ve výsledcích vyhledávání upřednostňuje na úkor konkurence vlastní služby, například Google Shopping, Google Hotels a Google Flights. Případ staví Google proti specializovaným

    … více »
    Ladislav Hagara | Komentářů: 8
    včera 12:22 | Pozvánky

    Byl oznámen program a spuštěna registrace na konferenci Prague PostgreSQL Developer Day 2026. Konference se koná 27. a 28. ledna a bude mít tři tracky s 18 přednáškami a jeden den workshopů.

    TomasVondra | Komentářů: 0
    včera 12:11 | Pozvánky

    Na webu československého síťařského setkání CSNOG 2026 je vyvěšený program, registrace a další informace k akci. CSNOG 2026 se uskuteční 21. a 22. ledna příštího roku a bude se i tentokrát konat ve Zlíně. Přednášky, kterých bude více než 30, budou opět rozdělené do tří bloků - správa sítí, legislativa a regulace a akademické projekty. Počet míst je omezený, proto kdo má zájem, měl by se registrovat co nejdříve.

    VSladek | Komentářů: 0
    Jaké řešení používáte k vývoji / práci?
     (35%)
     (48%)
     (20%)
     (17%)
     (23%)
     (15%)
     (24%)
     (15%)
     (18%)
    Celkem 469 hlasů
     Komentářů: 19, poslední 11.12. 20:04
    Rozcestník

    Dotaz: Jednoduchy socket server

    12.5.2005 13:52 Elpin
    Jednoduchy socket server
    Přečteno: 319×
    Potreboval bych poradit. Mam tenhleten C++ kod:
    int main( int argn, char **arg ) 
    { 
     int port = atoi( arg[ 1 ] ); 
    
     int sock_listen = socket( AF_INET, SOCK_STREAM, 0 ); 
    
     in_addr addr_any = { INADDR_ANY }; 
     sockaddr_in srv_addr; 
     srv_addr.sin_family = AF_INET; 
     srv_addr.sin_port = htons( port ); 
     srv_addr.sin_addr = addr_any; 
    
     // set socket options to reuse address and port again in short time 
     int opt = 1; 
     setsockopt( sock_listen, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof( opt ) ); 
    
     // assign address and port to socket 
     bind( sock_listen, (const sockaddr * ) &srv_addr, sizeof( srv_addr ) ); 
    
     listen( sock_listen, 1 ); 
    
     int sock_client = 0; 
    
     // go! 
     while ( 1 ) 
     { 
         char buf[ 100 ]; 
    
         fd_set read_wait_set; 
         // set all bits to zero 
         FD_ZERO( &read_wait_set ); 
    
         // wait for stdin 
         FD_SET( STDIN_FILENO, &read_wait_set ); 
    
         // select listen or client socket 
         if ( sock_client ) 
             FD_SET( sock_client, &read_wait_set ); 
         else 
             FD_SET( sock_listen, &read_wait_set ); 
    
         // wait for selected handles 
         if ( select( MAX( sock_client, sock_listen ) + 1, 
                              &read_wait_set, 0, 0, 0 ) < 0 ) break; 
    
         // data on stdin? 
         if ( FD_ISSET( STDIN_FILENO, &read_wait_set ) ) 
         { 
             //  read data from stdin 
             int l = read( STDIN_FILENO, buf, sizeof( buf ) ); 
             if ( l < 0 ) 
                 printf( "Unable to read data from stdin." ); 
             else 
                 printf( "Got %d bytes from stdin.", l ); 
    
             // send data to client 
             l = write( sock_client, buf, l ); 
             if ( l < 0 ) 
                 printf( "Unable send data to client." ); 
             else 
                 printf( "Sent %d bytes to client.", l ); 
         } 
    
         // new connection form client? 
         else if ( FD_ISSET( sock_listen, &read_wait_set ) ) 
         { 
             sockaddr_in rsa; 
             int rsa_size = sizeof( rsa ); 
    
             // accept connection from client 
             sock_client = accept( sock_listen, ( sockaddr * ) &rsa, ( socklen_t * ) &rsa_size ); 
    
             uint lsa = sizeof( srv_addr ); 
    
             // get my identification 
             getsockname( sock_client, ( sockaddr * ) &srv_addr, &lsa ); 
          
             // get client info 
             getpeername( sock_client, ( sockaddr * ) &srv_addr, &lsa ); 
    
             printf( "Peer name: '%s'  port: %d", 
                      inet_ntoa( srv_addr.sin_addr ), ntohs( srv_addr.sin_port ) ); 
    
             printf( "Enter 'quit' to quit server." ); 
         } 
    
         // data from client? 
         else if ( FD_ISSET( sock_client, &read_wait_set ) ) 
         { 
             // read data from socket 
             int l = read( sock_client, buf, sizeof( buf ) ); 
             if ( !l ) 
             { 
                 printf( "Client close socket." ); 
                 close( sock_client ); 
                 sock_client = 0; 
                 break; 
             } 
             else if ( l < 0 ) 
                 printf( "Unable to read data from socket." ); 
             else 
                 printf( "Read %d bytes from socket.", l ); 
    
             // send all data to stdout 
             l = write( STDOUT_FILENO, buf, l ); 
    
             // check, if client ask to close connection 
             if ( !strncasecmp( buf, "close", 5 ) ) 
             { 
                printf( "Client sent 'close' request, connection closed." ); 
                printf( "Now wait for new client." ); 
                 close( sock_client ); 
                 sock_client = 0; 
             } 
         } 
    
         // quit request from server or client 
         if ( !strncasecmp( buf, "quit", 4 ) ) 
         { 
             close( sock_client ); 
             printf( "Quit request entered... exiting now...\n" ); 
             break; 
         } 
     } 
    
     close( sock_listen ); 
    
     return 0; 
    } 
    
    Je to socket server. Prijima pripojeni od klientu a vypise do konzole zpravu, kterou klient napise. Ja bych prave potreboval aby server prijimal spojeni od nekolika klientu najednou a kdyz nejaky klient neco napise, server to vypise do konzole a kdyz neco napise server, vypisou to na svou konzoli vsichni klienti. Zatim jsem jen prisel na to, ze musim vlozit radek "int pid = fork()" do kodu za funkci accept() a nechat otcovsky proces at vyrizuje pripojeni a nechat potomka at dela zbytek, ale stale se mi to nedari! Mohli byste mi poradit? Byl bych vdecny za jakoukoliv pomoc. Predem diky.

    Odpovědi

    12.5.2005 15:38 miso
    Rozbalit Rozbalit vše Re: Jednoduchy socket server
    http://www.root.cz/clanky/sokety-a-c-funkce-poll-a-zaver/
    alebo hladaj funkciu select.

    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.