Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto
Samsung rinnova la serie pieghevole di punta con Galaxy Z Fold8 Ultra: pannello interno da 8 pollici quasi senza piega, cerniera Flex Titanium, Snapdragon 8 Elite Gen 5 for Galaxy e batteria finalmente da 5.000 mAh. Prezzo italiano da 2.299 a 2.899 euro. Tra colorimetro, benchmark reali e giorni di uso quotidiano, ecco dove questo pieghevole convince e dove il nome Ultra fatica ancora a trovare piena giustificazione
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing"
La nuova Insta360 X6 introduce sensori Sony da 1/1.1" e un SoC Triple AI a 4nm. Analizziamo le riprese 8K, il primo Dolby Vision nativo a 10-bit nel settore sferico e l'innovativo flusso di lavoro diretto sulla futura versione 22 di DaVinci Resolve.
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli
Dopo due settimane trascorse al volante della Dacia Spring 2026 possiamo raccontarvi tutto, dalle novità di motore e batteria, fino ai consumi in tutti le situazioni, compresa l'autonomia reale ad alta velocità
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-09-2005, 16:00   #1
Fire Fox II
Senior Member
 
L'Avatar di Fire Fox II
 
Iscritto dal: Nov 2000
Città: Salerno
Messaggi: 4338
Problema con i Socket in C

Salve raga

ho realizzato un programma server-client in cui, scrivendo da linea di comando un frase (lato client), il server conta il num di parole (intese con numero di spazi) e restituisce il risultato al client.
Il programma funziona solo la "prima" volta: cioè, il primo risultato restituito è esatto, ma la seconda volta sbaglia...
E' come se rimanga memorizzata ancora la prima frase, quindi penso debba essere "ripulito" il socket o qualcosa del genere...
Il prog è questo

Codice:
Server

#include	"basic.h"
void server_echo(int sockfd);
int main(int argc, char **argv) {
        pid_t			childpid;
	int			listenfd, connfd;
	struct sockaddr_in	servaddr, cliaddr;
	socklen_t		cliaddr_len;
	if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		printf("socket error");
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family      = AF_INET;
	servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	servaddr.sin_port        = htons(PORT);	/* daytime server */
	if( (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0)
		printf("bind error");
	if( listen(listenfd, BACKLOG) < 0 )
		printf("listen error");
	for ( ; ; ) {
		cliaddr_len = sizeof(cliaddr);
		if( (connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &cliaddr_len)) < 0)
			printf("accept error");
                if( (childpid = fork()) == 0 ) {
		    close(listenfd);
		    server_echo(connfd);      /* svolge tutto il lavoro del server */
		    exit(0);
		}
		close(connfd);
	}
}
void server_echo(int sockfd) {
        ssize_t         n;
        char             line[MAXLINE],astring[1]="",a,ris[MAXLINE];
        int   		   len,i=0,cont;
	for ( ; ; ) {
                if ( (n = readln(sockfd, line, MAXLINE)) == 0)
                        return;         /* connection closed by other end */
	len=strlen(line);
	cont=1;
	for (i=0;i<len;i++)
	{
		a=line[i];
		sprintf(astring,"%c",a);
		if(strcmp(astring," ")==0) cont++;
	}
	sprintf(ris,"%d",cont);
	writeln(sockfd, ris, MAXLINE);
	cont=1;
        }
}
Codice:
Client

#include	"basic.h"
void client_echo(FILE *fp, int sockfd); 
int main(int argc, char **argv) {
	int			sockfd, n;
	struct sockaddr_in	servaddr;
	if (argc != 2)
		printf("usage: echotcpcli <IPaddress>");
	if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
		printf("socket error");
	bzero(&servaddr, sizeof(servaddr));
	servaddr.sin_family = AF_INET;
	servaddr.sin_port   = htons(PORT);	/* echo server */
	if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0)
		printf("inet_pton error for %s", argv[1]);
	if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0)
		printf("connect error");
        client_echo(stdin, sockfd);	/* svolge tutto il lavoro del client */
	exit(0);
}

void client_echo(FILE *fp, int sockfd) {
        char    sendline[MAXLINE], recvline[MAXLINE];
        while (fgets(sendline, MAXLINE, fp) != NULL) {
                writeln(sockfd, sendline, strlen(sendline));
                if (readln(sockfd, recvline, MAXLINE) == 0)
                        printf("%s: server terminated prematurely",__FILE__);
                printf("Il numero delle parole è %s\n",&recvline);
        }
}
Cosa ho sbagliato?

Thanks a lot!
__________________
Doc : "Ovviamente, il continuum temporale è stato interrotto creando questa nuova temporale sequenza di eventi risultante in questa realtà alternativa"
Marty : ...... "Che lingua è, Doc?!?"
Fire Fox II è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2005, 09:40   #2
Fenomeno85
Senior Member
 
L'Avatar di Fenomeno85
 
Iscritto dal: Jun 2002
Città: Provincia De VaRéSe ~ § ~ Lat.: 45° 51' 7" N Long.: 8° 50' 21" E ~§~ Magica Inter ~ § ~ Detto: A Chi Più Amiamo Meno Dire Sappiamo ~ § ~ ~ § ~ Hobby: Divertimento allo Stato Puro ~ § ~ ~ § ~ You Must Go Out ~ § ~
Messaggi: 8897
allora server:

Codice:
/* non guardata spero che sia giusta */
void server_echo(int sockfd) {
        ssize_t         n;
        char             line[MAXLINE],astring[1]="",a,ris[MAXLINE];
        int   		   len,i=0,cont;
	for ( ; ; ) {
                if ( (n = readln(sockfd, line, MAXLINE)) == 0)
                        return;         /* connection closed by other end */
	len=strlen(line);
	cont=1;
	for (i=0;i<len;i++)
	{
		a=line[i];
		sprintf(astring,"%c",a);
		if(strcmp(astring," ")==0) cont++;
	}
	sprintf(ris,"%d",cont);
	writeln(sockfd, ris, MAXLINE);
	cont=1;
        }
}
Codice:
/* corretta ma non testata */
int main(void) {
    pid_t               childpid;
	int                 listenfd, connfd;
	struct sockaddr_in	servaddr, cliaddr;
	socklen_t		    cliaddr_len;

/*perchè l'avevi messa nel for? la dimensione di cliaddr non cambia mica.*/	
	cliaddr_len = sizeof(cliaddr); 

/*se c'è errore devi ANCHE uscire il programma non può andare avanti */	
    if( (listenfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){
		perror("socket error");
		exit (EXIT_FAILURE);
		
        bzero(&servaddr, sizeof(servaddr));
	    
        servaddr.sin_family      = AF_INET;
	    servaddr.sin_addr.s_addr = inet_addr(INADDR_ANY);
	    servaddr.sin_port        = htons((u_short) PORT);	/* daytime server */
	    if( (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr))) < 0){
		    perror("bind error");
		    exit (EXIT_FAILURE);
        }
	    
        if( listen(listenfd, BACKLOG) < 0 )
            perror("listen error");
            exit (EXIT_FAILURE);
        }
Codice:
/* preferisco un while(1) che un for (;;) */	    
        while (1){
	          if( (connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &cliaddr_len)) < 0){
           			perror("accept error");
                    exit (EXIT_FAILURE);
              }
              childpid = fork ();
              if (childpid != 0){
                    close (connfd);
              }
              else {
                   server_echo(connfd);      /* svolge tutto il lavoro del server */
		           close(connfd); /* si chiude il socket creato con l'accept NON il socket listensd o come si chiama */
		           exit(0);
              }
		}
}
~§~ Sempre E Solo Lei ~§~
__________________
Meglio essere protagonisti della propria tragedia che spettatori della propria vita
Si dovrebbe pensare più a far bene che a stare bene: e così si finirebbe anche a star meglio.
Non preoccuparti solo di essere migliore dei tuoi contemporanei o dei tuoi predecessori.Cerca solo di essere migliore di te stesso

Ultima modifica di Fenomeno85 : 06-09-2005 alle 09:43.
Fenomeno85 è offline   Rispondi citando il messaggio o parte di esso
Old 07-09-2005, 13:50   #3
Fire Fox II
Senior Member
 
L'Avatar di Fire Fox II
 
Iscritto dal: Nov 2000
Città: Salerno
Messaggi: 4338
Ciao,

grazie per le correzioni

Però ci sono readln e writeln che sono comandi non riconosciuti...
__________________
Doc : "Ovviamente, il continuum temporale è stato interrotto creando questa nuova temporale sequenza di eventi risultante in questa realtà alternativa"
Marty : ...... "Che lingua è, Doc?!?"
Fire Fox II è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold8 Ultra: il pieghevole più famoso diventa quasi perfetto Recensione Samsung Galaxy Z Fold8 Ultra: il pieg...
Insta360 X6: Dolby Vision, 8K e montaggio "Zero Editing" Insta360 X6: Dolby Vision, 8K e montaggio "...
Due settimane con Dacia Spring 2026: novità, consumi, autonomia reale e test bagagli Due settimane con Dacia Spring 2026: novit&agrav...
AORUS GeForce RTX 5080 INFINITY WOOD 16G: una scheda video diversa dalle altre AORUS GeForce RTX 5080 INFINITY WOOD 16G: una sc...
Hyundai Ioniq 9: dopo due settimane di test non avremmo voluto restituirla Hyundai Ioniq 9: dopo due settimane di test non ...
Il volo inaugurale dell'aereo elettrico ...
L'IA non rende tutte le imprese uguali. ...
Netflix cambia la strategia sul gaming: ...
Hyundai Kona elettrica: è ancora ...
Vogliono costruire un monumento per Elon...
Ring Intercom Audio crolla a 39,99€ su A...
La Francia blocca il divieto dei social ...
Trump citato in giudizio: chiesto lo sto...
PEC obbligatoria per revisione e passagg...
Il ripulitore di watermark Claude da 4.5...
Xiaomi 17 Ultra scambia il Sole per la L...
È arrivata la migliore e-bike Eng...
Apple Mac mini M4, ecco perché conviene ...
Robot aspirapolvere in offerta su Amazon...
Il nuovo pick-up elettrico di Ford &egra...
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: 09:41.


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