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 08-09-2005, 10:53   #1
Fire Fox II
Senior Member
 
L'Avatar di Fire Fox II
 
Iscritto dal: Nov 2000
Città: Salerno
Messaggi: 4338
[C] Problemi con i socket TCP e chat

Salve raga

sono 2 giorni che non riesco a far funzionare un programma che mi permetta di far comunicare diversi client tramite un server... I programmi sono compilati, ma una volta avviati, se scrivo qualcosa, nessuno riceve niente... Non riesco a capire dove sia l'errore

Questi sono i 2 prog

Codice:
 CLIENT
 
#include	"basic.h"

void client_echo(FILE *fp, int sockfd, char nick[MAXLINE]); 

int main(int argc, char **argv) {
	int			sockfd;
	struct sockaddr_in	servaddr;

	if (argc != 3)
		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");

	char newut[MAXLINE];
	sprintf(newut, "%s è in chat.\n",argv[2]);
	write(sockfd,newut,strlen(newut));

	// argv[2] rappresenta il nick name
        client_echo(stdin, sockfd, argv[2]);	/* svolge tutto il lavoro del client */
	exit(0);
}


void client_echo(FILE *fp, int sockfd, char nick[MAXLINE]) {
        char    sendline[MAXLINE], recvline[MAXLINE], sendstring[MAXLINE];
	int 	maxfd,n;
	fd_set	rset;

	// inizializza il file descriptor
	FD_ZERO(&rset);
	maxfd = MAX(fileno(fp), sockfd) +1;

	for ( ; ; ) {
		
		// inserisce il file descriptor nell'insieme
		FD_SET(fileno(fp), &rset);
		FD_SET(sockfd, &rset);
		if (select(maxfd, &rset, NULL, NULL, NULL) < 0)
			printf("select error");
		if (FD_ISSET(fileno(fp), &rset) )
		{
			// testa se è stato scritto qualcosa su linea di comando
			if (fgets(sendline, MAXLINE, fp) == NULL)
			{
				printf("Errore scrittura\n");
				return;
			}
			sprintf(sendstring,"%s : %s\n", nick,sendline);
			if ((reti_writen(sockfd, sendstring, strlen(sendstring))) < 0)
				printf("Errore scrittura sul socket\n");
		}

		if (FD_ISSET(sockfd, &rset))
		{
			if ( (n=reti_readline(sockfd, recvline, MAXLINE)) < 0)
			{
				if (errno == EPIPE)
				{
					printf("%s [%d]: server disconnesso",__FILE__,__LINE__);
					break;
				}
			}
			else if (n == 0)
			{
				printf("%s: server terminated prematurely\n",__FILE__);
				exit(1);
			}
			else
			{
				printf("%s", recvline);
			}
		}
	}
}
Codice:
SERVER
 
#include	"basic.h"

void server_echo(int sockfd);

int main(int argc, char **argv) {
	int			listenfd, connfd, sockfd, maxfd, i,maxi,client[FD_SETSIZE],file,ready,u;
	struct sockaddr_in	servaddr, cliaddr;
	socklen_t		clilen;
	fd_set			rset;
	ssize_t			n;
	char			buff[MAXLINE];
	
	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");

	memset(client, 0, FD_SETSIZE);
	maxfd=listenfd;
	maxi=-1;
	for (i=0; i < FD_SETSIZE; i++)
		client[i] = -1;			// inizializza l'array client;
	client[maxfd]=1;
	if((file=open("FILE.TXT", O_RDWR|O_CREAT|O_TRUNC,0644)) < 0)
		printf("errore creazione file\n");
	close(file);
	while(1)
	{	
		FD_ZERO(&rset);
		for (i=listenfd;i<=maxfd;i++)
			if(client[i] !=0) FD_SET(i,&rset);
		if ( ( ready = select(maxfd+1, &rset, NULL, NULL, NULL))< 0)
		{
			printf("select error\n");
			exit(1);
		}
		if (FD_ISSET(listenfd,&rset)) 
		{
			clilen=sizeof(cliaddr);
			if( (connfd = accept(listenfd, (struct sockaddr *) &cliaddr, &clilen)) < 0)
			{
				printf("accept error");
				exit(1);
			}
			for (i=0; i< FD_SETSIZE; i++)
				if (client[i] < 0)
				{
					client[i] = connfd;
					break;
				}
			if (i == FD_SETSIZE) 	printf("Troppi client\n");
			FD_SET(connfd, &rset );
			if(connfd>maxfd)	maxfd=connfd;
			if(i>maxi) 	maxi = i;
			if(--ready <=0) 	continue;
			for (i=0;i<=maxi;i++)
			{
				sockfd = client[i];
				if (FD_ISSET(client[i], &rset) )
				{
					if ( (n=reti_readline(sockfd,buff, MAXLINE)) == 0)
					{
						printf("fd %d chiuso\n", i);
						close(sockfd);
						FD_CLR(sockfd, &rset);
						client[i] = -1;
					}
					else
					{
/*						fputs(buff, stdout);
						if((file=open("FILE,TXT",O_RDWR))<0)
							printf("FILE.TXT open error\n");
						lseek(file,-1,SEEK_END);
						reti_writen(file,buff,n);
						reti_writen(file,"\n",1);
*/						for (u = 0;u <=maxfd; u++)
							if (u != i) reti_writen(client[u],buff,n);
//						reti_writen(client[i],buff,sizeof(buff));
					}
					
					if (--ready <=0)	break;	
				}
			}
		}
	}
}
Qualcuno può aiutarmi? Gliene sarei davvero grato

Thanks
__________________
Doc : "Ovviamente, il continuum temporale è stato interrotto creando questa nuova temporale sequenza di eventi risultante in questa realtà alternativa"
Marty : ...... "Che lingua è, Doc?!?"

Ultima modifica di Fire Fox II : 08-09-2005 alle 20:50.
Fire Fox II è 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, ...
World of Warcraft: Forever è il Classic+...
La Serie A con DAZN e Amazon Prime con l...
Giochi Ubisoft su Steam senza Ubisoft Co...
Miami Beach ha autorizzato la maxi opera...
Apple regala un altro anno di funzioni s...
Alla fine è successo davvero: Vol...
Il meglio di Amazon del weekend in uno s...
Speciale TV in offerta su Amazon: Hisens...
Non c'è pace per Trezor: 347.000 e-mail ...
È un portatile Dell e li vale tut...
Apple iPhone 17 Pro Max 256GB a 1.195€ (...
GPT-6 Astra è davvero AGI o non s...
LG OLED G6S 48'' a 845€ e G6 55'' a 1368...
Mantax Otax: il malware Android che crip...
Musk incassa un altro maxi contratto IA:...
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:47.


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