Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
Recensione DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice
DJI Mini 5 Pro porta nella serie Mini il primo sensore CMOS da 1 pollice, unendo qualità d'immagine professionale alla portabilità estrema tipica di tutti i prodotti della famiglia. È un drone C0, quindi in un peso estremamente contenuto e che non richiede patentino, propone un gimbal rotabile a 225 gradi, rilevamento ostacoli anche notturno e autonomia fino a 36 minuti. Caratteristiche che rendono il nuovo drone un riferimento per creator e appassionati
ASUS Expertbook PM3: il notebook robusto per le aziende
ASUS Expertbook PM3: il notebook robusto per le aziende
Pensato per le necessità del pubblico d'azienda, ASUS Expertbook PM3 abbina uno chassis particolrmente robusto ad un pannello da 16 pollici di diagonale che avantaggia la produttività personale. Sotto la scocca troviamo un processore AMD Ryzen AI 7 350, che grazie alla certificazione Copilot+ PC permette di sfruttare al meglio l'accelerazione degli ambiti di intelligenza artificiale
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo
Abbiamo provato per diversi giorni una new entry del mercato italiano, la Gowow Ori, una moto elettrica da off-road, omologata anche per la strada, che sfrutta una pendrive USB per cambiare radicalmente le sue prestazioni
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 DJI Mini 5 Pro: il drone C0 ultra-leggero con sensore da 1 pollice Recensione DJI Mini 5 Pro: il drone C0 ultra-leg...
ASUS Expertbook PM3: il notebook robusto per le aziende ASUS Expertbook PM3: il notebook robusto per le ...
Test ride con Gowow Ori: elettrico e off-road vanno incredibilmente d'accordo Test ride con Gowow Ori: elettrico e off-road va...
Recensione OnePlus 15: potenza da vendere e batteria enorme dentro un nuovo design   Recensione OnePlus 15: potenza da vendere e batt...
AMD Ryzen 5 7500X3D: la nuova CPU da gaming con 3D V-Cache per la fascia media AMD Ryzen 5 7500X3D: la nuova CPU da gaming con ...
Sicurezza PC: Microsoft punta sui chip d...
Gemini 3 Pro disponibile ora: è i...
Super sconti robot aspirapolvere: ECOVAC...
DOOM: The Dark Ages si espande con Ripat...
EA SPORTS annuncia il futuro della serie...
Tutte le TV già in offerta defini...
Meta non ha un monopolio nel settore dei...
L'amministrazione Trump presta 1 miliard...
Continua la rivoluzione interna in Intel...
Lenovo Legion 5i, gaming senza compromes...
iPhone 17 Pro a sorpresa: il nuovo mostr...
SwitchBot, arriva il Presence Sensor a...
AirPods 4 in super offerta su Amazon: il...
Offerte Bose folli su Amazon: QuietComfo...
Apple apre le porte agli assistenti di t...
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: 11:26.


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