Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere?
Equilibrio e potenza definiscono il Samsung Galaxy S26+, un flagship che sfida la variante Ultra e la fascia alta del mercato con il primo processore mobile a 2nm. Pur mantenendo l'hardware fotografico precedente, lo smartphone brilla per un display QHD+ da 6,7 pollici d'eccellenza, privo però del trattamento antiriflesso dell'Ultra, e per prestazioni molto elevate. Completano il quadro la ricarica wireless a 20W e, soprattutto, un supporto software settennale
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti
Zeekr sbarca ufficialmente in Italia con tre modelli elettrici premium, X, 7X e 001, distribuiti da Jameel Motors su una rete di 52 punti vendita già attivi. La Zeekr X parte da 39.900 euro, la 7X da 54.100: piattaforma a 800V, chip Snapdragon di ultima generazione, ricarica ultraveloce e un'autonomia dichiarata fino a 615 km WLTP. Le prime consegne sono previste a metà aprile
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 08-08-2007, 09:30   #1
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
[java,c++] CLIENT-SERVER

Faccio un esempio ma serve per capire un discorso piu generale:
ipotizziamo che il server sia scritto in java per cui avrò in ascolto un server Socket

serverSocket.accept();


ipotizzando di dover scambiare nome e cognome scrivendo il client in Java si potrebbe scambiare una semplice stringa,ma lavorando con linguaggi differenti l' unica soluzione è lavorare sui flussi di Byte?Ovviamente il discorso si estende a linguaggi differenti e alla gestione di protocolli ben piu complessi di una stringa.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 10:08   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
ipotizzando di dover scambiare nome e cognome scrivendo il client in Java si potrebbe scambiare una semplice stringa,ma lavorando con linguaggi differenti l' unica soluzione è lavorare sui flussi di Byte?Ovviamente il discorso si estende a linguaggi differenti e alla gestione di protocolli ben piu complessi di una stringa.
I socket sono orientati ai byte, questo vale in qualunque linguaggio, java, c/c++, c# ecc....

Cosa c'è "al di sopra" nel flusso di byte, dipende dal "protocollo" che è stato progettato. Se il protocollo prevede di scambiare stringhe, ad esempio, la prima questione che mi viene in mente è quella del charset da usare. Se invece prevedesse di scambiare dati binari come int, long, ecc..., la questione è quella dell'endian.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 10:35   #3
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quello che voglio dire,una volta acquisito il canale se lavorassi con 2 entità java potrei utilizzare un metodo o meglio uno stream orientato allo scambio di Object per cui il client invia una stringa e il server sa come castizzarla,che poi sotto il "cofano" avvenga tutto in modo serializzato è normale.Ma se un client C++deve inviare una Stringa al server java questo deve poi ricomporsela a partire dai byte...e non puo piu essere utilizzato uno stream come ObjectInputStream ad esempio
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 10:50   #4
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Quello che voglio dire,una volta acquisito il canale se lavorassi con 2 entità java potrei utilizzare un metodo o meglio uno stream orientato allo scambio di Object per cui il client invia una stringa e il server sa come castizzarla,che poi sotto il "cofano" avvenga tutto in modo serializzato è normale.Ma se un client C++deve inviare una Stringa al server java questo deve poi ricomporsela a partire dai byte...e non puo piu essere utilizzato uno stream come ObjectInputStream ad esempio
Eh no. Se vuoi che il protocollo possa essere usato da diversi linguaggi/piattaforme, devi prima pensare il protocollo in maniera più generica e ampia.

Con Java puoi prendere un oggetto e serializzarlo facilmente con ObjectOutputStream. Certo è vero che il C++ non ha un ObjectInputStream e non saprebbe nulla della serializzazione di Java ma tu potresti documentarti bene sulla serializzazione di Java (le specifiche ci sono) e realizzare il codice in C++ che interpreta il flusso di dati. Questo ovviamente con tutte le problematiche che comporta .....

Dal mio punto di vista non sarebbe la soluzione giusta anche se in teoria fattibile.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 11:17   #5
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
in pratica una volta che le specifiche del protocollo sono state definite diventa trasparente al linguaggio utilizzato per i client e i server,l' importante che riescano a sincronizzarsi sulle specifiche stesse.?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 11:27   #6
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
in pratica una volta che le specifiche del protocollo sono state definite diventa trasparente al linguaggio utilizzato per i client e i server,l' importante che riescano a sincronizzarsi sulle specifiche stesse.?
Il linea di massima sì, è così.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 12:44   #7
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
e se si trattasse di scambiare un file,la maggiore universalità del file stesso ci semplificherebbe la vitaoppure è la medesima cosa?
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 13:11   #8
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
e se si trattasse di scambiare un file,la maggiore universalità del file stesso ci semplificherebbe la vitaoppure è la medesima cosa?
Trasferire un file è forse la cosa meno complicata, perché non devi stare a preoccuparti di charset, endian, ecc....
Un host legge il file e invia lo stream di byte, l'altro host legge lo stream e scrive su file.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 08-08-2007, 15:04   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
aggiungo: è proprio per non doversi preoccupare dell'endianness che molti protocolli per Internet di livello Application sono ASCII, vedi ad esempio HTTP, POP ed SMTP, IRC, MSN...
l'unico contro dell'avere un protocollo ASCII è il consumo di banda lievemente maggiore. ad esempio per spedire un numero intero in ASCII lo dovrò tipicamente spedire in forma testuale scritto in base 10, quindi mentre con un protocollo binario userò solamente 4 bytes con un protocollo ASCII ne userò un numero variabile da 1 a una decina.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 14:05   #10
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da andbin Guarda i messaggi
Trasferire un file è forse la cosa meno complicata, perché non devi stare a preoccuparti di charset, endian, ecc....
Un host legge il file e invia lo stream di byte, l'altro host legge lo stream e scrive su file.
Se dovessi scrivere una applicazione java che invia un file ad altre applicazioni non scritte in java come lo implementeresti o meglio quali strumenti java andresti ad utilizzare,probabilmente utilizzare la classe File è scorretto in quanto si tratterebbe di inviare un Object.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 14:14   #11
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
Se dovessi scrivere una applicazione java che invia un file ad altre applicazioni non scritte in java come lo implementeresti o meglio quali strumenti java andresti ad utilizzare,probabilmente utilizzare la classe File è scorretto in quanto si tratterebbe di inviare un Object.
Ma no.
Non devi inviare un oggetto File ... che tra l'altro non ha nulla a che fare con il contenuto fisico del file, visto che File rappresenta solo una "astrazione" del nome di un file.

L'ideale è pensare al protocollo. Trasferire un file significa trasferire in sequenza tutti i byte del file così come sono (e come abbiamo detto i socket sono orientati ai byte).

Per fare una buona cosa lo stream di dati potrebbe essere:

Codice:
+-----------+---------/ /----------+
| lunghezza |  contenuto del file  |
+-----------+---------/ /----------+
dove 'lunghezza' sono 4 byte che formano un int e il resto è lo stream di byte letto dal file.
La lunghezza è utile al ricevente perché così sa quanti byte deve aspettarsi.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 14:30   #12
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
si concettualmente avevo intuito,ma in codice java a grandi linee come lo faresti.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 14:59   #13
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da nuovoUtente86 Guarda i messaggi
si concettualmente avevo intuito,ma in codice java a grandi linee come lo faresti.
Usando DataOutputStream.

Codice:
OutputStream os = socket.getOutputStream ();

DataOutputStream dos = new DataOutputStream (os);

int len = file.length ();

InputStream is = new FileInputStream (file);

byte[] buf = new byte[512];

int n;

dos.writeInt (len);

while ((n = is.read (buf)) > 0)
    dos.write (buf, 0, n);

is.close ();
dos.close ();
dove 'socket' è il socket e 'file' è un oggetto File.

Il codice dovrebbe essere ok, salvo errori/omissioni ... l'ho scritto di getto e comunque c'è da aggiungere una valida gestione delle eccezioni.

Nota che writeInt scrive un int in un formato ben preciso e indipendente dalla piattaforma: in Big-Endian. Vuol dire che se un file è lungo 1000 byte (3E8h) i primi 4 byte dello stream sono 00h 00h 03h E8h
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 09-08-2007, 15:54   #14
nuovoUtente86
Senior Member
 
Iscritto dal: Mar 2007
Messaggi: 7863
Quote:
Originariamente inviato da andbin Guarda i messaggi
Usando DataOutputStream.

Codice:
OutputStream os = socket.getOutputStream ();

DataOutputStream dos = new DataOutputStream (os);

int len = file.length ();

InputStream is = new FileInputStream (file);

byte[] buf = new byte[512];

int n;

dos.writeInt (len);

while ((n = is.read (buf)) > 0)
    dos.write (buf, 0, n);

is.close ();
dos.close ();
dove 'socket' è il socket e 'file' è un oggetto File.

Il codice dovrebbe essere ok, salvo errori/omissioni ... l'ho scritto di getto e comunque c'è da aggiungere una valida gestione delle eccezioni.

Nota che writeInt scrive un int in un formato ben preciso e indipendente dalla piattaforma: in Big-Endian. Vuol dire che se un file è lungo 1000 byte (3E8h) i primi 4 byte dello stream sono 00h 00h 03h E8h
Ok grazie 1000.
nuovoUtente86 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Marathon: arriva il Fortnite hardcore Marathon: arriva il Fortnite hardcore
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, ...
Cometa interstellare 3I/ATLAS: l'ESA dif...
Kodak PIXPRO AZ653: la fotocamera bridge...
Monitor da gaming: Samsung si conferma l...
The Duskbloods potrebbe arrivare a fine ...
Il miglior pesce d'aprile del mondo Linu...
Monopattini elettrici a 62 km/h fermati ...
OpenAI porta la modalità vocale d...
Mercedes-Benz introduce lo steer-by-wire...
Hacker agli Uffizi, il museo smentisce: ...
Nvidia mostra il futuro della grafica co...
Windows 11, scattano gli aggiornamenti f...
TIM lancia l'offerta di Pasqua: Giga ill...
Prime foto reali per OPPO Find X9 Ultra:...
Il leak di Claude Code diventa un'esca: ...
Netflix, batosta in Italia: aumenti ille...
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: 19:38.


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