Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-07-2006, 11:48   #1
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
[JAVA]java.io.StreamCorruptedException

Questo pezzo di codice:
Codice:
while(connesso){
		try{
		        ObjectInputStream is=new ObjectInputStream(cs.getInputStream());
	                Dati in=(Dati)is.readObject();
		catch(Exception e){
			System.out.println("Client disconnesso");
			connesso=false;
		}
}
Mi solleva l'eccezzione di cui sopra, di cosa si tratta? Com'è possibile che i dati si danneggiano?
In particolare ho questa eccezzione quando ci sono almeno 3 client connessi e non subito ma dopo un po' di tempo(casuala) che restano connessi.
La connessione è di questo tipo:
client A client B e server S
A deve comunicare con B:
A invia i dati ad S, S li invia a B ma anche ad A,A legge i dati , B legge i dati.

Idem per B.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2006, 15:46   #2
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Up nessuna sa niente? devo postare più codice?
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2006, 17:03   #3
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
cs e' una socket? Leggi un solo dato? Per leggere questo dato crei ogni volta un ObjectInputStream? Lo sai che ObjectInputStream aggiunge delle informazioni a quanto spedisci, in modo da ricostruire correttamente l'oggetto in arrivo? Lo sai che questo ti obbliga a scrivere mediante il corrispondente ObjectOutputStream?
Quando scrivi, apri e chiudi Object stream alla stessa maniera? Lo sai che quando apri uno stream di questo tipo vengono subito spediti dei dati in maniera "trasparente" all'operatore?

Scusa la serie di domande. Probabilmente la soluzione e' nelle risposte di quest'ultime (spero)

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2006, 19:18   #4
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ciao, siccome non riesco bene a capire quello che mi hai chiesto comunque cs è il socket del client, creato così: cs=ss.accept();
ss è il ServerSocket .
Comunque dal codice che ho incollato si vede che creo ongi volta un objectinputstream, il quale legge un solo tipo di dato, ma li legge di continuo perchè il server li invia di continuo.

Ultima modifica di MEMon : 15-07-2006 alle 19:21.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 11:06   #5
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da MEMon
Ciao, siccome non riesco bene a capire quello che mi hai chiesto comunque cs è il socket del client, creato così: cs=ss.accept();
ss è il ServerSocket .
Comunque dal codice che ho incollato si vede che creo ongi volta un objectinputstream, il quale legge un solo tipo di dato, ma li legge di continuo perchè il server li invia di continuo.
Scusa, non sono stato chiaro.
Le domande che avevo posto erano per cercare di individuare il problema:
- ogni volta apri un object input stream. Questo si aspetta di trovare alcuni dati (che java inserisce in modo "trasparente" a te) all'interno dello stream.
Va da se che devi trattare la spedizione nella maniera speculare, i.e. aprire un object output stream tutte le volte e spedire l'oggetto.
- non puoi aprire lo stream una volta all'apertura della socket?
- Non ho visto la chiusura dello stream

L'idea che mi sono fatto e' che ci sia "disparita'" fra il codice che spedisce e quello che riceve: se, per esempio, spedisci dei semplici byte, non potrai riceverli con un ObjectInputStream, perche' Java manca delle informazioni per restituirti l'oggetto del tipo giusto (castato poi a Object).
Fai una verifica, e posta poi qualche info

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 11:13   #6
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ciao, non ho chiuso lo stream perchè altrimenti mi sollevva un eccezzione, di tipo socket is closed... non so perchè però.
Comunque quel codice è l'invio dati da parte di un client, che li invia di continuo, dall'alktra parte c'è il server che rimane sempre in ascolta dei dati, il tipo di dato che invio è sempre e solo uno quindi non c'è il problema della possibile diversità del dato inviato.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 11:18   #7
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da MEMon
Ciao, non ho chiuso lo stream perchè altrimenti mi sollevva un eccezzione, di tipo socket is closed... non so perchè però.
Comunque quel codice è l'invio dati da parte di un client, che li invia di continuo, dall'alktra parte c'è il server che rimane sempre in ascolta dei dati, il tipo di dato che invio è sempre e solo uno quindi non c'è il problema della possibile diversità del dato inviato.
Ciao,
grazie per le info. Purtroppo non abbiamo ancora chiarito come vengono spedite quelle informazioni. Le spedisci tramite un ObjectOutputStream costruito sopra la socket?
L'eccezione di socket closed fa pensare che probabilmente non chiudevi l'ObjectInputStream ma la socket stessa.

Se vuoi, pubblica un pezzo di codice in piu' sia per il client sia per il server. Fra un po' vado a cena e poi lo provo

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 12:48   #8
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ti ringrazio per l'interssamento! Certo che ti posto del codice ecco qua, questo è come il server spedisce l'oggetto:
Codice:
	public void scrivi(Dati out){
		try{
			ObjectOutputStream os=new ObjectOutputStream(cs.getOutputStream());
			os.writeObject(out);
			//server.aggiornaLog("\nOUT-"+out.getNick()+" size="+cs.getSendBufferSize());
			os.flush();
		}
		catch(Exception e){
			server.aggiornaLog("\nErrore "+e+" da parte di "+dato.getNick());
		}
	}
se chiudo l'ObjectOutputStream dopo aver spedito l'oggetto mi da sempre errore, come se chiudessi il socket!
Come vedi scrivo lo stesso tipo di dato(Dati).

Il problema forse potrebbe essere causato da un altro pezzo di codice.
Ti spiego, questo server resta sempre in ascolto dai client(ogni client ha il suo thread) e quando arriva un dato da un client il server(usando il codice qui sopra) lo invia a tutti i client che lo ricevano usando il codice postato al primo post.
Potrebbe essere la causa dell'errore? Nota comunque che non posso chiudere nessun sttream perchè mi da sempre l'eccezzione socketclosed.
Se mi connetto con un solo client va tutto benone, con due client gira parecchio tempo ma poi a volte da streamCorrupted, con tre client quasi subito da errore...
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 16:53   #9
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ciao,
la procedura scrivi() e' quindi chiamata per ogni client connesso. Ovviamente passerai la socket in qualche modo, immagino che non scriverai sempre sulla stessa.

Perdonami ma sono sempre convinto che aprire una ObjectXXputStream ogni volta non sia una buona tecnica, overhead a parte. Ti e' possibile modificare in modo da aprire una volta sola? Ti risolverebbe anche il problema di dover chiudere, visto che hai l'eccezione di socket closed...

Cmq il fatto di avere una trasmissione a piu' client NON ti dovrebbe dare alcun problema. Ovviamente ogni client ha la propria socket aperta verso il server, giusto? (Scusa se faccio tante domande, e' per chiarire....).

Una curiosita': come fai a passare le varie socket su cui scrivere? Aggiorni un membro della classe?
Se hai un vettore di socket o se hai un thread per socket non dovrebbe essere difficile aprire la ObjectXXputStream una sola volta...

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:24   #10
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Vediamo se con questa spiegazione mi riesco a far capire meglio.
Ho un server, il quale resta in ascolto su una determinata porta della richiesta di connessione da parte dei client, quando un client si connette, il server crea il socket per il client(socketClient=socketServer.accept() e fa partire un thread dedicato solo per quel client passandogli il socketClient.
In questo modo il server dedica un thread per ogni client per comunicare.
Il server si salva anche tutti i riferimenti ai thread creati per ogni client in una lista, in modo da poter inviare i dati ai client dall'esterno(cioè da fuori il thread).

Sono riuscito come da te suggerito a fare in modo di aprire gli stream solo una volta, in pratica alla creazione dei thread dedicati creo anche gli stream sui socket interessati.
Il fatto è che ora sembra non funzionare nulla, cioè non vi sono eccezzioni sollevate, ma il server ed i client non comunicano...
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:28   #11
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Scusa, questo era chiaro. La selva di domande e' per cercare l'errore.

Se vuoi (o se puoi), pubblica il codice. E' davvero strano, DEVE andare. L'architettura che hai descritto e' "pulita", non ci sono scuse, deve andare per forza!
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:31   #12
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Se ti invio tutto ci daresti un'occhiata? però non è commentato...
Tanto si tratta di una prova, tutto il codice è fine a se stesso, solo per provare questo tipo di comunicazione.
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:32   #13
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Ok. Qui e' notte fonda, do un'occhiata e vado a dormire. Casomai rispondo domani.

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:36   #14
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ecco qui
La main class è Main.class (che fantasia eh )
Ti ringrazio aspetto una tua risposta!
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:41   #15
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da MEMon
Ecco qui
La main class è Main.class (che fantasia eh )
Ti ringrazio aspetto una tua risposta!
Non vedo nessun allegato... e' il mio browser o una semplice dimenticanza?
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 17:43   #16
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
se clicchi su "qui" non ti scarica nulla?
cmq per sicurezza http://allejp.altervista.org/classes.rar
forse con firefox non fa scaricare direttamente, in tal caso usa explorer!
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 18:01   #17
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Quote:
Originariamente inviato da MEMon
se clicchi su "qui" non ti scarica nulla?
cmq per sicurezza http://allejp.altervista.org/classes.rar
forse con firefox non fa scaricare direttamente, in tal caso usa explorer!
Roger. Ora l'ho preso, ma... contiene i .class!
Riprovo domattina.

High Flying
Sottovento
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 18:02   #18
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Che stupido che sono si mi sn dimenticato i .java
Rimedio intanto, buonanotte!
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 17-07-2006, 18:05   #19
MEMon
Senior Member
 
Iscritto dal: Dec 2002
Messaggi: 3359
Ecco qui ci sono i file java... scusa ancora.
http://www.easy-sharing.com/570027/src.rar.html
MEMon è offline   Rispondi citando il messaggio o parte di esso
Old 18-07-2006, 09:03   #20
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Buongiorno,
prima di tutto, complimenti: scrivi il codice in maniera chiara e pulita. Non e' da tutti.

Ho dato un'occhiata, ed ho fatto delle piccole modifiche, mettendo dei commenti (in inglese). Le modifiche le ho marcate con DW (downwind, sottovento in inglese), di cui molte sono semplicemente per debug (dei messaggi a video).

Ho aperto una sola volta gli stream, ho fatto girare l'applicazione con un paio di client e li ho lasciati aperti tutta la mattina (circa 4 ore). Ogni tanto li controllavo, battevo un paio di tasti e tornavo a fare dell'altro.

Sembra che non appaia piu' il corrupted stream. Spero che tu possa provarlo in maniera piu' seria di quanto ha fatto il sottoscritto ed eventualmente mi faccia sapere.

Fra le modifiche: oltre a quella di aprire un object stream nel costruttore, ho evitato di creare un thread all'interno di un thread. non conosco l'applicazione (magari ti serve) ma per il codice che mi hai spedito mi sembrava ridondante.

IMPORTANTE: facendo le prove, mi sono ricordato di un problema - l'object input stream resta bloccato fintanto che non si apre, dall'altra parte, un object output stream!
Quindi, quando crei gli stream, devi stare attento a creare prima l'output e poi l'input, altrimenti la tua applicazione e' bloccata.

Spero di esserti stato di aiuto, e spero di vedere la tua applicazione girare.

High Flying
Sottovento
Allegati
File Type: zip modified.zip (6.9 KB, 9 visite)
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
La capsula SpaceX Dragon CRS-33 ha acces...
La NASA è sempre più vicin...
Crisi delle memorie: ASUS torna al passa...
Le console next-generation potrebbero es...
Gemini cresce ancora: la quota di mercat...
Samsung sfida TSMC: la capacità produtti...
Iliad alza il prezzo della fibra ottica ...
Il prossimo low cost di POCO sarà il più...
The Elder Scrolls VI: ecco le ultime sul...
Ecco i saldi di fine anno Amazon, 34 off...
iPhone Fold: scorte limitate al lancio m...
OpenAI porterà la pubblicità in ChatGPT ...
TSMC aumenterà ancora i prezzi: nel 2026...
Marvel pubblica anche il secondo teaser ...
Nuovo accordo tra xAI e il Pentagono: l'...
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: 17:18.


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