Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh
realme 16 5G è un nuovo smartphone con sensore Sony IMX 852 da 50MP sul retro e uno specchio selfie fisico integrato nella camera bar, una prima nel segmento di mercato. Batteria da 6550mAh in un corpo da 8,1mm e 183g, certificazione IP69K e ricarica da 45W completano un pacchetto aggressivo per la fascia media, per uno dei prodotti più interessanti del produttore sul piano commerciale
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni
Sono ormai definitive le nuove norme del Codice della Strada per i monopattini elettrici. Non solo targa e assicurazione, le regole sono tante e riguardano diversi aspetti, vi spieghiamo come evitare sanzioni che possono essere salate
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta
DLSS 4.5 introduce Dynamic Multi Frame Generation e MFG 6X, permettendo fino a cinque frame generati per ogni frame renderizzato. I test su Cyberpunk 2077 e 007 First Light mostrano forti incrementi di FPS e riduzione della latenza su RTX 5090 Laptop. Migliorano fluidità, stabilità e qualità visiva.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 07-03-2003, 17:20   #1
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Sto strippando...ancora socket su C...AIUTATEMI VI PREGO!

Sto lavorando in concorrenza e un server apre un listening socket in attesa di una connessione, poi i client (su altre macchine) tentano di connettersi. Il fatto e' che tutti i client credono di essersi connessi correttamente, pero' solo alcuni di essi lo sono veramente perche' dal lato server ne accetta 2 o 3 (variabile) su 4 che dovrebbe accettare...MA PERCHE'???
Il server al terzo o quarto client sembra quasi che non lo vede nemmeno, si ferma sull'accept e sta li' all'infinito, il client invece crede (non so perche') di essersi connesso correttamente e poi prova a comunicare e ovviamente non ci riesce...IDEE?
Dimenticavo: lavoro in C sotto Linux

SERVER:
Codice:
int openListeningSocket(void)
{
        struct sockaddr_in Local, Cli;
        int socketfd, newsocketfd, OptVal, len, ris;

        /* get a stream socket */
        printf ("socket()\n");
        socketfd=socket(AF_INET, SOCK_STREAM, 0);

        if (socketfd==SOCKET_ERROR)
        {
                printf ("socket() failed, Err: %d \"%s\"\n", errno,strerror(errno));
                exit(1);
        }

        /* avoid EADDRINUSE error on bind() */
        OptVal=1;
        printf ("setsockopt()\n");
        ris=setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, (char *)&OptVal, sizeof(OptVal));

        if (ris==SOCKET_ERROR)
        {
                printf ("setsockopt() SO_REUSEADDR failed, Err: %d \"%s\"\n", errno,strerror(errno));
                exit(1);
        }

        /* name the socket */
        memset (&Local, 0, sizeof(Local));
        Local.sin_family        =       AF_INET;
        /* indicando INADDR_ANY viene collegato il socket all'indirizzo locale IP     */
        /* dell'interaccia di rete che verrÃ|  utilizzata per inoltrare il datagram IP  */
        Local.sin_addr.s_addr   =       htonl(INADDR_ANY);         /* wildcard */
        Local.sin_port          =       htons(local_port_number);

        printf ("bind()\n");
        ris=bind(socketfd, (struct sockaddr*) &Local, sizeof(Local));

        if (ris==SOCKET_ERROR)
        {
                printf ("bind() failed, Err: %d \"%s\"\n",errno,strerror(errno));
                exit(1);
        }

        printf ("listen()\n");
        ris=listen(socketfd, 100);

        if (ris==SOCKET_ERROR)
        {
                printf ("listen() failed, Err: %d \"%s\"\n",errno,strerror(errno));
                exit(1);
        }

        /* wait for connection request */
        memset (&Cli, 0, sizeof(Cli));
        len=sizeof(Cli);

        printf ("accept()\n");
        newsocketfd=accept(socketfd, (struct sockaddr*) &Cli, &len);

        if (newsocketfd==SOCKET_ERROR)
        {
                printf ("accept() failed, Err: %d \"%s\"\n",errno,strerror(errno));
                exit(1);
        }

        /* chiusura */
        printf ("close()\n");
        close(socketfd);

        return(newsocketfd);
};

CLIENT:
Codice:
int connectToSocket(char tcp[20], char port[20])
{
        struct sockaddr_in Local, Serv;
        char string_remote_ip_address[100];
        short unsigned int remote_port_number;
        int socketfd, OptVal, ris;

        strncpy(string_remote_ip_address, tcp, 20);
        remote_port_number = atoi(port);

        /* get a datagram socket */
        //printf ("socket()\n");
        socketfd=socket(AF_INET, SOCK_STREAM, 0);

        if (socketfd<0)
        {
                printf ("socket() failed, Err: %d \"%s\"\n", errno,strerror(errno));
                return(-1);
        }

        /* avoid EADDRINUSE error on bind() */
        OptVal=1;

        //printf ("setsockopt()\n");
        ris=setsockopt(socketfd, SOL_SOCKET, SO_REUSEADDR, (char *)&OptVal, sizeof(OptVal));

        if (ris<0)
        {
                printf ("setsockopt() SO_REUSEADDR failed, Err: %d \"%s\"\n", errno,strerror(errno));
                return(-1);
        }

        /* name the socket */
        memset(&Local,0,sizeof(Local));
        Local.sin_family        =       AF_INET;
        /* indicando INADDR_ANY viene collegato il socket all'indirizzo locale IP     */
        /* dell'interfaccia di rete che verrÃ|  utilizzata per inoltrare i dati          */
        Local.sin_addr.s_addr   =       htonl(INADDR_ANY);         /* wildcard */
        Local.sin_port          =       htons(0);

        //printf ("bind()\n");
        ris=bind(socketfd, (struct sockaddr*) &Local, sizeof(Local));

        if (ris<0)
        {
                printf ("bind() failed, Err: %d \"%s\"\n",errno,strerror(errno));
                return(-1);
                //exit(1);
        }

        /* assign our destination address */
        memset(&Serv, 0, sizeof(Serv));
        Serv.sin_family         =       AF_INET;
        Serv.sin_addr.s_addr    =     
       inet_addr(string_remote_ip_address);
        Serv.sin_port           =       htons(remote_port_number);

        /* connection request */
        //printf ("connect()\n");
        ris=connect(socketfd, (struct sockaddr*) &Serv, sizeof(Serv));

        if (ris<0)
        {
                printf ("connect() to %s:%d failed, Err: %d \"%s\"\n",string_remote_ip_address,remote_port_number,errno,strerror(errno));
                return(-1);
        }

        return(socketfd);
};
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2003, 18:22   #2
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Perchè il socket in ascolto non lo lasci aperto invece di chiuderlo ad ogni connessione che fai ? Non è questo il metodo corretto di operare...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2003, 18:32   #3
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originally posted by "cionci"

Perchè il socket in ascolto non lo lasci aperto invece di chiuderlo ad ogni connessione che fai ? Non è questo il metodo corretto di operare...
Hai ragione sono un co@lione! Perche' chiudo e riapro il socket non lo so neppure io...
Cimmo è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione realme 16 5G: lo smartphone con Selfie Mirror ha una batteria da 6550mAh Recensione realme 16 5G: lo smartphone con Selfi...
Come rispettare tutte le nuove regole per i monopattini elettrici? La guida per non rischiare sanzioni Come rispettare tutte le nuove regole per i mono...
DLSS 4.5: con Dynamic Frame Generation e MFG 6X NVIDIA alza la posta DLSS 4.5: con Dynamic Frame Generation e MFG 6X ...
Plaud NotePin S, il registratore IA si fa indossabile (ma è facile da perdere) Plaud NotePin S, il registratore IA si fa indoss...
Redmi Watch 6 in prova: lo smartwatch con ampio display da 2000 nit a meno di 100 euro Redmi Watch 6 in prova: lo smartwatch con ampio ...
La NASA spiega perché non ci sono...
La NASA sta provando il Divergent Deploy...
Fidanzarsi con l'IA non è cos&igr...
AI Overviews: quando il riassunto &egrav...
Il circuito segreto di Apple finisce a W...
Disastro Meta: l'azienda elimina il rico...
Google Gemini non va: centinaia di segna...
Neural Dawn mostra il futuro del gaming ...
Telegram torna su Apple Watch con un'app...
Da oggi si può acquistare Amazon ...
Windows 11 è più veloce: implementati il...
Ritornano gli auricolari con il cavo: Te...
Insta360 Luna Ultra: ecco il debutto del...
BOOX Go 6 Gen II ufficiale: ora si scriv...
BYD sfida Tesla con un piano da 2 miliar...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 01:29.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v