Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura
Il primo Micro RGB di Samsung per il salotto è il 65 pollici da 2.749 euro. Sul banco di misura abbiamo rilevato 2.000 nit di picco, nero assoluto con il local dimming e il 91,4% del BT.2020, il colore più ampio che abbiamo misurato su un LCD
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre
Apple ha rinnovato iPhone 18 Pro soprattutto dentro: chip A20 Pro a 2 nm con memoria affiancata al SoC, camera di vapore tre volte più ampia, Dynamic Island più piccola del 25% grazie a Face ID sotto il display e fotocamera principale con diaframma variabile da f/1.48 a f/4. Lo abbiamo misurato al colorimetro e nei benchmark, usato con iOS 27 e messo alla prova in fotografia tra laghi, borghi e interni poco illuminati
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34
A Londra, per il trentennale dei Toughbook, Panasonic ha presentato il tablet G3 e il 2-in-1 34. Con Jon Tucker, a capo dell'ingegneria europea, abbiamo parlato di ciò che non si vede: batterie, antenne, porte seriali e accorgimenti nati sul campo
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


Samsung Micro RGB R95H, il primo LCD a LED rossi, verdi e blu di Samsung alla prova del banco di misura Samsung Micro RGB R95H, il primo LCD a LED rossi...
iPhone 18 Pro: la recensione del miglior iPhone compatto di sempre iPhone 18 Pro: la recensione del miglior iPhone ...
Panasonic, 30 anni di Toughbook: la "Bibbia" di mille regole dietro i nuovi G3 e 34 Panasonic, 30 anni di Toughbook: la "Bibbia...
realme C100x, lo smartphone economico con la batteria da 7500 mAh. La recensione realme C100x, lo smartphone economico con la bat...
Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Windows 11, un solo simbolo può risparmi...
Niente cloud, niente abbonamenti, niente...
Prime o meno, Amazon è piena di o...
Kindle in offerta: e-reader base a 89€ e...
Hackerato l'account ufficiale Microsoft ...
Tutti i dispositivi Ring: videocamere 2K...
Memorie HBM, la domanda si concentra su ...
Dash cam 70mai 4K da 74,99€: A800 Nano, ...
Nuovi rincari da Fastweb: l'operatore ha...
Sconti Amazon sui nuovi Google Pixel 11 ...
Dal RE Engine al 'motore generativo': il...
SpaceX mostra nuove immagini del lancio ...
Cina: CAS Space e Guangzhou Laboratory e...
Nikon Comedy Wildlife Awards 2026: le fo...
Samsung Galaxy A57 e A37 costano di più ...
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:27.


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