Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare
A New York HP ha messo al centro della scena HP IQ, la piattaforma di IA locale da 20 miliardi di parametri. L’abbiamo vista in funzione: è uno strumento che funziona, pensato per un target specifico, con vantaggi reali e limiti altrettanto evidenti
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è
La PNY GeForce RTX 5080 Slim OC si distingue nel panorama delle GPU di fascia alta per il design compatto a due slot, ispirato alla NVIDIA GeForce RTX 5080 Founders Edition. In questo test analizziamo comportamento termico e prestazioni in gioco, valutando se il formato ridotto comprometta o meno l'esperienza complessiva rispetto alle soluzioni più ingombranti presenti sul mercato.
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei
HUAWEI WiFi Mesh X3 Pro Suite è probabilmente il router mesh più fotogenico che si possa acquistare oggi in Italia, ma dietro il guscio in acrilico trasparente e le luci LED dinamiche c'è una macchina tecnica costruita attorno allo standard Wi-Fi 7, con velocità teoriche Dual-Band fino a 3,6 Gbps e una copertura fino a 120 m² una volta abbinato il router principale all'extender incluso nel kit
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-09-2002, 12:08   #1
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
socket TCP su C

Ho questo problema:
lavoro su socket TCP su C, spedisco un sacco di messaggi da un host all'altro, pero' il secondo host non riceve niente (sta bloccato sulla read) finche' l'host che spedisce non chiude la connessione o gli faccio io un kill -9...perche'?
Se sono stato troppo vago fatemelo sapere...

ciao e grazie
Cimmo
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 15:48   #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
Diminuisci il buffer della read...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 18:05   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Dovrebbe funzionare ugualmente, in quanto la read dovrebbe ritornare anche se è disponibile una quantità di dati inferiore a quella richiesta (blocca solo se non ci sono dati).
Puoi mandare il codice incriminato? (sia del client che del server)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 19:10   #4
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Non posso mandarvi tutto il codice perche' e' una pappardella che non ci cavereste i piedi, pero' vi mando quello che riceve e dopo un po' di debug ho scoperto qualcosa.
Io mi sono fatto una funzione per ricevere i messaggi (quella che posto dopo nel messaggio) e lui cosa fa: praticamente va' avanti a leggere pero' non becca mai il delimitatore '\0' e quindi non esce mai dal while e cosi' neanche dalla funzione. Diminuendo il buffer non fa altro che fare piu' giri di while per leggere tutto, pero' quando ha finito si inchioda lo stesso in attesa del e non esce.
Se pero' il processo che spedisce termina, allora il processo che contiene questa funzione si sblocca...mi sapreste dire il perche'?

grazie e 1000

ciao
Cimmo


int receiveData(int socketfd, char *msg)
{
int nread, n;

/* lettura */
nread=0;
printf ("\nread()\n");
fflush(stdout);

while (1)
{
if ((n=read(socketfd, &(msg[nread]), MAXSIZE)) <=0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"read() failed [err %d] ",errno);
perror(msgerror);
fflush(stderr);
return(1);
}
}
else
{
nread+=n;

if ((msg[nread-1]=='\0') || (nread>=MAXSIZE))
break;
}
}

fflush(stdout);

return(0);
};
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 19:45   #5
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
Ma tu sei sicuro di spedirlo lo '\0' ?
Se la stringa che spedisci è lunga 10 caratteri...dovrai spedirne 11 con la send...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 05-09-2002, 21:41   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Codice:
   if (errno!=EINTR)
   {
    char msgerror[1024];
    sprintf(msgerror,"read() failed [err %d] ",errno);
    perror(msgerror);
    fflush(stderr);
    return(1);
   }
  }
  else
  {
   nread+=n;
Dove sta scritto che la read setta errno=EINTR in caso di successo?
Codice:
   
   if ((msg[nread-1]=='\0') || (nread>=MAXSIZE))
    break;
Sbagliato.
Nessuno può assicurarti che più pacchetti non siano stati riassemblati prima della read, dopo essere stati ad es. divisi a metà durante la trasmissione. Questo vuol dire che con una singola read ne puoi ricevere uno e mezzo, poi altre due metà ecc.
Devi controllare tutti i byte ricevuti in una read, alla ricerca di eventuali '\0' intermedi. Il tcp è stream, ma la dinamica del flusso non la puoi controllare.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 11:48   #7
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originariamente inviato da ilsensine
[b]Dove sta scritto che la read setta errno=EINTR in caso di successo?
No qui non hai capito tu, nel senso che se c'e' un errore (cioe' la read ha restituito un numero <=0) allora non tiene conto dell'errore EINTR che altro non e' che una interruzione dovuta ad una sistem call. Se invece la read restituisce un numero >0 va' nel ramo else e quell'if non lo esegue neanche.
Quote:
[b]
Sbagliato.
Nessuno può assicurarti che più pacchetti non siano stati riassemblati prima della read, dopo essere stati ad es. divisi a metà durante la trasmissione. Questo vuol dire che con una singola read ne puoi ricevere uno e mezzo, poi altre due metà ecc.
Devi controllare tutti i byte ricevuti in una read, alla ricerca di eventuali '
Quote:
Originariamente inviato da ilsensine
Dove sta scritto che la read setta errno=EINTR in caso di successo?
No qui non hai capito tu, nel senso che se c'e' un errore (cioe' la read ha restituito un numero <=0) allora non tiene conto dell'errore EINTR che altro non e' che una interruzione dovuta ad una sistem call. Se invece la read restituisce un numero >0 va' nel ramo else e quell'if non lo esegue neanche.
Quote:

Sbagliato.
Nessuno può assicurarti che più pacchetti non siano stati riassemblati prima della read, dopo essere stati ad es. divisi a metà durante la trasmissione. Questo vuol dire che con una singola read ne puoi ricevere uno e mezzo, poi altre due metà ecc.
Devi controllare tutti i byte ricevuti in una read, alla ricerca di eventuali '\0' intermedi. Il tcp è stream, ma la dinamica del flusso non la puoi controllare.
' intermedi. Il tcp è stream, ma la dinamica del flusso non la puoi controllare.
Si lo so che la read puo' leggere pezzi a caso, ma io allora come faccio? E poi comunque ho notato che anche quando ha letto tutto quello che c'era da leggere alla fine non trova lo stesso il '\0' e si blocca.
Addirittura succede cosi':
faccio partire il server che si mette in attesa, faccio partire il client che si connette e comincia a spedire al server il quale riceve, ma si inchioda come ho gia' spiegato, poi il client a suo volta lo faccio bloccare e tutto rimane bloccato. Se a manoni uccido (con kill -9) il client, il server si sblocca dalla read e mi ritorna magicamente tutto il messaggione con tutto quello che ho spedito.
Cosa devo fare?
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 13:46   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
No qui non hai capito tu, nel senso che se c'e' un errore (cioe' la read ha restituito un numero <=0) allora non tiene conto dell'errore EINTR che altro non e' che una interruzione dovuta ad una sistem call. Se invece la read restituisce un numero >0 va' nel ramo else e quell'if non lo esegue neanche.
Ok avevo perso qualche parentesi

Quote:
Si lo so che la read puo' leggere pezzi a caso, ma io allora come faccio? E poi comunque ho notato che anche quando ha letto tutto quello che c'era da leggere alla fine non trova lo stesso il '
Quote:
No qui non hai capito tu, nel senso che se c'e' un errore (cioe' la read ha restituito un numero <=0) allora non tiene conto dell'errore EINTR che altro non e' che una interruzione dovuta ad una sistem call. Se invece la read restituisce un numero >0 va' nel ramo else e quell'if non lo esegue neanche.
Ok avevo perso qualche parentesi

Quote:
Si lo so che la read puo' leggere pezzi a caso, ma io allora come faccio? E poi comunque ho notato che anche quando ha letto tutto quello che c'era da leggere alla fine non trova lo stesso il '\0' e si blocca.
Addirittura succede cosi':
faccio partire il server che si mette in attesa, faccio partire il client che si connette e comincia a spedire al server il quale riceve, ma si inchioda come ho gia' spiegato, poi il client a suo volta lo faccio bloccare e tutto rimane bloccato. Se a manoni uccido (con kill -9) il client, il server si sblocca dalla read e mi ritorna magicamente tutto il messaggione con tutto quello che ho spedito.
Cosa devo fare?
' e si blocca.
Addirittura succede cosi':
faccio partire il server che si mette in attesa, faccio partire il client che si connette e comincia a spedire al server il quale riceve, ma si inchioda come ho gia' spiegato, poi il client a suo volta lo faccio bloccare e tutto rimane bloccato. Se a manoni uccido (con kill -9) il client, il server si sblocca dalla read e mi ritorna magicamente tutto il messaggione con tutto quello che ho spedito.
Cosa devo fare?
Innanzitutto verifica quello che ha detto cionci, ovvero che se devi spedire una stringa s devi trasmettere strlen(s)+1 byte.
Poi potresti mettere dei messaggi di debug dopo la read per vedere quello che succede.
Nota che il risultato della read è <0 se c'è stato un errore e ==0 se il client si è disconnesso (e in questo caso errno rimane indefinito)
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 14:42   #9
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Quote:
Originariamente inviato da ilsensine
[b]
Ok avevo perso qualche parentesi


Innanzitutto verifica quello che ha detto cionci, ovvero che se devi spedire una stringa s devi trasmettere strlen(s)+1 byte.
Poi potresti mettere dei messaggi di debug dopo la read per vedere quello che succede.
Nota che il risultato della read è <0 se c'è stato un errore e ==0 se il client si è disconnesso (e in questo caso errno rimane indefinito)
Ma sto '\0' glielo devo mettere io o mi basta che durante la spedizione do' come lunghezza della stringa strlen(s)+1? Il mio professore dell'universita' mi ha detto che non dovevo fare cosi'...AIUTO!
Comunque il debug l'ho fatto (con DDD) e mi si inchioda sulla read non boccheggia il '\0'...
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 15:15   #10
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
Se è una stringa lo '\0' c'è sempre in fondo...e per definizione una stringa in C è una sequenza di caratteri a aprtire da un certo indirizzo con un '\0' che indica la fine della stringa...

Quindi se quello che mandi è una stringa allora c'è lo '\0' in fondo e per mandarlo devi dare la dimensione strlen(str) + 1 alla send...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 15:27   #11
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Ok nella send ho messo strlen(s)+1, io faccio 5 write:
1) scrivo 1/
2) scrivo 6/
3) scrivo 247/
4) scrivo 1/
5) scrivo 3/

e il risultato e' che invece di arrivarmi 1/6/247/1/3/ mi arriva cosi': 1/\0006/\000247/\0001/\0003/\000

perche'?

grazie della pazienza!
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 15:53   #12
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
Ci puoi far vedere il modo in cui costruisci i messaggi che invii ?
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 15:54   #13
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Congruente con quello che ti ho detto. Leggendo MAXSIZE byte, dici al kernel di "svuotare" la coda tcp fino ad un massimo di MAXSIZE byte. Ovviamente i pacchetti che sono arrivati fin'ora vengono "impacchettati" e letti tutti insieme dalla read().
Soluzioni possibili:
- Leggi 1 byte per volta (bleah!)
- Dividi la lettura in 2 strati: uno (quello attuale) che legge i dati e li mette in un buffer fregandosene di trovare gli '\0'; un altro che legge dal buffer, cerca la prima occorrenza di '\0' ed estrae la stringa dal buffer.
- Prima di spedire una stringa, spedisci un int indicante la sua lunghezza. Così non hai neanche necessità di inviare lo '\0' finale.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 15:58   #14
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
Quote:
Originariamente inviato da Cimmo
[b]Ok nella send ho messo strlen(s)+1, io faccio 5 write:
1) scrivo 1/
2) scrivo 6/
3) scrivo 247/
4) scrivo 1/
5) scrivo 3/

e il risultato e' che invece di arrivarmi 1/6/247/1/3/ mi arriva cosi': 1/
Quote:
Originariamente inviato da Cimmo
Ok nella send ho messo strlen(s)+1, io faccio 5 write:
1) scrivo 1/
2) scrivo 6/
3) scrivo 247/
4) scrivo 1/
5) scrivo 3/

e il risultato e' che invece di arrivarmi 1/6/247/1/3/ mi arriva cosi': 1/\0006/\000247/\0001/\0003/\000

perche'?

grazie della pazienza!
006/
Quote:
Originariamente inviato da Cimmo
Ok nella send ho messo strlen(s)+1, io faccio 5 write:
1) scrivo 1/
2) scrivo 6/
3) scrivo 247/
4) scrivo 1/
5) scrivo 3/

e il risultato e' che invece di arrivarmi 1/6/247/1/3/ mi arriva cosi': 1/\0006/\000247/\0001/\0003/\000

perche'?

grazie della pazienza!
00247/
Quote:
Originariamente inviato da Cimmo
Ok nella send ho messo strlen(s)+1, io faccio 5 write:
1) scrivo 1/
2) scrivo 6/
3) scrivo 247/
4) scrivo 1/
5) scrivo 3/

e il risultato e' che invece di arrivarmi 1/6/247/1/3/ mi arriva cosi': 1/\0006/\000247/\0001/\0003/\000

perche'?

grazie della pazienza!
001/
Quote:
Originariamente inviato da Cimmo
Ok nella send ho messo strlen(s)+1, io faccio 5 write:
1) scrivo 1/
2) scrivo 6/
3) scrivo 247/
4) scrivo 1/
5) scrivo 3/

e il risultato e' che invece di arrivarmi 1/6/247/1/3/ mi arriva cosi': 1/\0006/\000247/\0001/\0003/\000

perche'?

grazie della pazienza!
003/
Quote:
Originariamente inviato da Cimmo
Ok nella send ho messo strlen(s)+1, io faccio 5 write:
1) scrivo 1/
2) scrivo 6/
3) scrivo 247/
4) scrivo 1/
5) scrivo 3/

e il risultato e' che invece di arrivarmi 1/6/247/1/3/ mi arriva cosi': 1/\0006/\000247/\0001/\0003/\000

perche'?

grazie della pazienza!
00

perche'?

grazie della pazienza!
E poi...che te ne fai di spedire lo \0 ? Non hai già / che delimita le stringhe ?
Comunque ha ragione ilsensine...fai una lettura a due livelli...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 16:01   #15
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
1/
Quote:
1/\0006/\000247/\0001/\0003/\000
006/
Quote:
1/\0006/\000247/\0001/\0003/\000
00247/
Quote:
1/\0006/\000247/\0001/\0003/\000
001/
Quote:
1/\0006/\000247/\0001/\0003/\000
003/
Quote:
1/\0006/\000247/\0001/\0003/\000
00
Al di là dell'impacchettamento, tutta quella abbondanza di '0' è corretta o mi sto perdendo qualche altra cosa?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 16:05   #16
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Cosi' costruisco le stringhe...

strcpy(data,"");
sprintf(tmp,"%d/",TotHosts);
strcpy(data,tmp);
sendData(socketfd, data);
printf("%s\n",data);

alla fine infatti a me del delimitatore \0 non me ne frega niente, cosa dovrei fare cambiare l'ultimo if della receiveData e invece di ricercare il '\0' ricerco il '/'?

Tutti quei \0 io non li metto, non so come ci finiscono!
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 16:31   #17
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Forse fai qualcosa di sbagliato nella sendData.
nb tmp è inutile, basta fare
sprintf(data,"%d/",TotHosts);
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 16:34   #18
Cimmo
Senior Member
 
L'Avatar di Cimmo
 
Iscritto dal: Jan 2001
Città: California
Messaggi: 7174
Eccovi anche la sendData, ora c'e' len=strlen(msg) senza il +1, ma come vi ho detto ho gia' provato entrambi i modi ed e' andata come sapete...

int sendData(int socketfd, char msg[MAXSIZE])
{
int nwrite, len, n;

/* scrittura */
//len=strlen(msg)+1;
len=strlen(msg);
nwrite=0;
printf ("\nwrite()\n");
fflush(stdout);

while ((len-nwrite)>0)
{
if ((n=write(socketfd, &(msg[nwrite]), (len-nwrite))) <=0)
{
if (errno!=EINTR)
{
char msgerror[1024];
sprintf(msgerror,"write() failed [err %d] ",errno);
perror(msgerror);
fflush(stderr);

return(1);
}
}
else
nwrite+=n;
}

return(0);
};
Cimmo è offline   Rispondi citando il messaggio o parte di esso
Old 06-09-2002, 17:25   #19
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
Per leggerti le varie stringhe terminate con '/' puoi ad esempio farti una cosa del genere :
Codice:
int readMsg(char *buf, char *msg, int nread)
{
	static int start = 0;
	int cur = start;
	int n = 0;
	len = strlen(msg);
	while(n < (MSGMAX + 1 - len) && cur < nread)
	{
		if(buf[i] == '/')
			break;
		else
		{
			++n; 
			++cur;
		}
	}

	if(n == (MSGMAX + 1 - len))
	{  
		/*lunghezza del messaggio eccessiva, te la puoi
		gestire come ti pare ad esempio riempiendo il msg corrente
		oppure riportando l'errore ed ignorando il buffer fino al prox '/'*/
		...
		return 2;
	}
	if(cur == nread)
	{  
		/*il msg è a metà fra due letture, riempio la parte corrente*/
		buf[nread] = '\0';
		strcpy(msg+len, buf+start);
		start = 0; /*riparto dall'inizio del buffer dopo una nuova lettura*/
		return 1;
	}
	/*se arrivo qui significa che ho trovato lo '/'*/
	buf[cur] = '\0';
	strcpy(msg+len, buf+start)
	start = cur + 1;
	return 0;
}

	....
	char buf[READMAX+1]; /*buffer di ricezione*/
	char msg[MSGMAX+1]; /*contiene il messaggio ricevuto*/

	while(1)
	{
		nread = leggiDaSocket(buf);
		if(nread > 0)
			while(!readMsg(buf, msg, nread))
			{
				/*qui ti gestisci il messaggio letto...ad esempio lo puoi visualizzare*/
				printf("%s ", msg);
				strcpy(msg, '\0');
			}
	}
	....
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HP Imagine 2026: abbiamo visto HP IQ all’opera, ecco cosa può (e non può) fare HP Imagine 2026: abbiamo visto HP IQ all’opera, ...
PNY RTX 5080 Slim OC, sembra una Founders Edition ma non lo è PNY RTX 5080 Slim OC, sembra una Founders Editio...
Wi-Fi 7 con il design di una vetta innevata: ecco il nuovo sistema mesh di Huawei Wi-Fi 7 con il design di una vetta innevata: ecc...
Core Ultra 7 270K Plus e Core Ultra 7 250K Plus: Intel cerca il riscatto ma ci riesce in parte Core Ultra 7 270K Plus e Core Ultra 7 250K Plus:...
PC Specialist Lafité 14 AI AMD: assemblato come vuoi tu PC Specialist Lafité 14 AI AMD: assemblat...
Meta moltiplica gli investimenti in data...
Addio riflessi fastidiosi? Samsung prese...
PlayStation 5, doccia fredda da Sony: i ...
Super Meat Boy 3D: annunciata la data d'...
XT View Matrix, il mid-tower Phanteks ch...
David Sacks lascia il ruolo di 'Crypto C...
LG All Stars 2026: quando l'installatore...
Addio ad Anna's Archive? Ecco la mossa l...
Addio al Mac Pro, Apple mette fine a un ...
Panasonic a MCE 2026: la rivoluzione sil...
Netflix alza la posta: il piano Premium ...
Nimbus Innovation Awards – Cloud Edition...
Wikipedia vieta i contenuti generati dal...
Niente volante, niente schermi: cos&igra...
Gli 'Avengers' di Windows sono tornati: ...
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: 16:57.


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