Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
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: 06:00.


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