Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto
Amazon porta i colori sul suo Kindle da scrittura più grande: schermo Colorsoft a 11 pollici, processore quad-core, penna premium più reattiva e strumenti IA per le note, sono le note salienti. Il salto di prezzo rispetto al modello in bianco e nero si fa sentire, anche se la percezione è quella di trovarsi di fronte a un prodotto di fascia altissima, per veri appassionati
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint
Abbiamo intervistato Sumit Dhawan, CEO di Proofpoint, per capire come stia cambiando il mondo della sicurezza con l'avvento dell'intelligenza artificiale e con il ritmo sempre più serrato a cui vengono trovate vulnerabilità nel software. Un problema significativo, che richiederà del tempo per essere risolto (o quantomeno arginato)
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 14-07-2008, 16:46   #1
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
[JAVA]scambio messaggi in applicazione client-server

Salve a tutti,
ho creato un'applicazione client-server che dovrebbe permettere lo scambio di messaggi tra loro fino a che il client non si disconnette. Il mio problema sta nel fatto che riesco a far leggere al server solamente il primo messaggio inviato dal client. Come posso risolvere??
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2008, 16:59   #2
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2008, 17:28   #3
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
incredibile! nessuno su questo forum conosce java al punto da creare un programmino client-server???
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
Old 14-07-2008, 23:09   #4
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Inizia con il postareil codice che hai scritto finora...poi qualcuno una mano te la darà
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 07:39   #5
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
Quote:
Originariamente inviato da Oceans11 Guarda i messaggi
Inizia con il postareil codice che hai scritto finora...poi qualcuno una mano te la darà
import java.net.*;
import java.io.*;

public class ServerThread extends Thread{
protected Socket s2;

public ServerThread(Socket client){
s2=client;

}
public void run(){
String msg;
try{
InputStream in=s2.getOutputStream();
BufferedReader ir=new BufferedReader (new InputStreamReader(in));
msg=ir.readLine();
System.out.println(msg);
ir.close()
s2.close();
System.out.println("Connessione chiusa.");
}
catch(IOException e){
e.printStackTrace();
}
}

public static void main(String[] args)throws IOException{
ServerSocket s=null;
int port;

if(args.length<1)
throw new IOException("Sintassi: HTTP_URL_Reader URL");
else
port=Integer.parseInt(args[0]);

try{
s=new ServerSocket(port);
}
catch(IOException err){
err.printStackTrace();
}
while(true){
System.out.println("Waiting...");
try{
Socket s2=s.accept();
System.out.println("Richiesta di connessione accettata.");
//io operations
ServerThread t=new ServerThread(s2);
t.start();
}
catch(IOException e){
e.printStackTrace();
}
}
}
}


Questo è il lato server. Naturalmente questa è la forma iniziale che ho implementato(cioè per la lettura di un singolo messaggio dopodiché chiude la connessione) ma ho provato con svariate modifiche al codice nel metodo "run"(anche con un ciclo while)per far si che possa leggere un numero di messaggi indefinito fino a che il client non si disconnette. Inutile dire che dalla parte opposta c'è un client che usa uno stream opposto per inviare messaggi.
Spero in un vostro cortese aiuto...
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 08:10   #6
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Il codice (che metterai tra i tag code vero???) va abbastanza bene.

Quote:
Originariamente inviato da Michael Jennings
Questo è il lato server. Naturalmente questa è la forma iniziale che ho implementato(cioè per la lettura di un singolo messaggio dopodiché chiude la connessione) ma ho provato con svariate modifiche al codice nel metodo "run"(anche con un ciclo while)per far si che possa leggere un numero di messaggi indefinito fino a che il client non si disconnette
L'unica modifica che devi fare è un ciclo per la gestione degli stream, e visto che stai aspettando che sia il client a decidere di chiudere la connessione, mentre tu lo fai decidere al server (chiude appena riceve il messaggio), potresti fare una cosa del tipo:

Codice:
while( Non ho raggiunto la fine dello stream ) {
   Il client è ancora connesso.
}
Meglio ancora se gestisci la disconnessione del client come un'eccezione.
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 08:24   #7
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
L'unica modifica che devi fare è un ciclo per la gestione degli stream, e visto che stai aspettando che sia il client a decidere di chiudere la connessione, mentre tu lo fai decidere al server (chiude appena riceve il messaggio), potresti fare una cosa del tipo:

Codice:
while( Non ho raggiunto la fine dello stream ) {
   Il client è ancora connesso.
}
Meglio ancora se gestisci la disconnessione del client come un'eccezione.[/quote]
Il problema è che quando ho provato a non chiudere lo stream di input e a non chiudere nemmeno la socket scrivendo così:
while(client.isConnected()){
msg=ir.readLine();
//stampa a schermo
}
sul monitor la lettura la faceva solo dopo ke il client si disconnetteva. tra l'altro scriveva null sullo scehrmo e non quanto inviato dal client.
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 08:47   #8
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Quote:
Originariamente inviato da Michael Jennings Guarda i messaggi
Il problema è che quando ho provato a non chiudere lo stream di input e a non chiudere nemmeno la socket scrivendo così:

Codice:
while(client.isConnected()){
      msg=ir.readLine();
      //stampa a schermo
}
sul monitor la lettura la faceva solo dopo ke il client si disconnetteva. tra l'altro scriveva null sullo scehrmo e non quanto inviato dal client.
A me funziona benissimo...ho appena modificato il tuo codice, te lo posto:

Codice:
import java.net.*;
import java.io.*;

public class ServerThread extends Thread
{
    protected Socket s2;

    public ServerThread(Socket client) {
        s2 = client;
    }

    public void run() {
        String msg;
        try {
            InputStream in = s2.getInputStream();
            BufferedReader ir = new BufferedReader(new InputStreamReader(in));
            while (s2.isConnected()) {
                msg = ir.readLine();
                System.out.println(msg);
            }
            ir.close();
            s2.close();
            System.out.println("Connessione chiusa.");
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException {
        ServerSocket s = null;
        int port = 12345;
        try {
            s = new ServerSocket(port);
        }
        catch (IOException err) {
            err.printStackTrace();
        }
        while (true) {
            System.out.println("Waiting...");
            try {
                Socket s2 = s.accept();
                System.out.println("Richiesta di connessione accettata.");
                // io operations
                ServerThread t = new ServerThread(s2);
                t.start();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
ovviamente se il client chiude brutalmente la connessione, il server ti lancia e stampa l'eccezione, ma continua a girare!!!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 14:45   #9
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
Innanzitutto grazie per la disponibilità e scusa del ritardo.
Ho provato il tuo codice e purtroppo come già succedeva a me, il programma dopo la ricezione del primo messaggio, anziché restare in attesa di nuovo input come fa all'inizio, inizia a stampare il valore null fino a che non lo chiudo in maniera forzata.
Ora il problema è capire perché a te funziona benissimo e a me nn va...
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 15:38   #10
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
allora il problema deve essere nel client....io ho fatto la prova con una specie di client telnet, senza scrivere il client, e tutto filava liscio. Prova a postarlo, magari più tardi ti posso aiutare io se nessuno ancora avrà provveduto.


[EDIT]: aspetta un attimo....ho appena provato il codice sel server proprio con il telnet di windows e siccome anche a me scappavano fuori centinaia di "null", ci ho riflettuto un secondo su....

in effetti noi facciamo:

Codice:
while (s2.isConnected()) {
                msg = ir.readLine();
                System.out.println(msg);
            }
quindi non c'è nessun controllo su msg = null, però l'altro client mi aveva ingannato!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"

Ultima modifica di Oceans11 : 15-07-2008 alle 15:43.
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 15:46   #11
Oceans11
Senior Member
 
L'Avatar di Oceans11
 
Iscritto dal: Sep 2005
Città: Torino
Messaggi: 606
Un altra cosa....una sleep ogni tanto sarebbe buona, sennò la cpu sta sempre a palla!!!
__________________
"Se proprio dovete piratare un prodotto, preferiamo che sia il nostro piuttosto che quello di qualcun altro." [Jeff Raikes]
"Pirating software? Choose Microsoft!"
Oceans11 è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 16:36   #12
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
per quel che riguarda il client è il più banale che possa esistere...apre una connessione col server e spedisce un messaggio di prova, dopodiché chiude la connessione.
cosa strana che ho notato è che dopo che l'esecuzione del client sia completata, il server tramite il metodo "isClosed()" riceve ancora un ritorno pari a "false".
io nn ci sto capendo più niente
per ovviare al problema parzialmente ho fatto in modo che per uscire dal while il server debba ricevere in input una particolare stringa(ad esempio: "exit"). in questo modo sembra funzionare...ma appena metto istruzioni che mi consentano di inviare stringhe create da tastiera e non costanti come in qst codice non funziona e anziché scrivere null non scrive più nulla

import java.net.*;
import java.io.*;

public class ClientThread{
public static void main(String[] args)throws IOException{
String msg=null;
try{
Socket s=new Socket("localhost", 12345);
OutputStream out=s.getOutputStream();
BufferedWriter ow= new BufferedWriter(new OutputStreamWriter(out));

ow.write("prova\n");
ow.write("prova\n");
ow.write("prova\n");
ow.write("prova\n");
ow.write("prova\n");
ow.write("exit\n");

ow.close();
s.close();
}
catch(IOException e){
e.printStackTrace();
}
}

}
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
Old 15-07-2008, 17:58   #13
Michael Jennings
Member
 
Iscritto dal: Jan 2007
Città: Napoli
Messaggi: 89
dopo ore di sbattimento ce l'ho fatta!
ho pensato solo molto dopo che lo stream di tipo buffered prima immagazzina tutto e poi legge alla fine.
per tale motivo una sequenza di messaggi non veniva letta istantaneamente ma solo quando chiudevo lo stream di output nel client.
ora con dataoutput e datainput va bene.
grazie mille per l'aiuto.
ciao a presto.
Michael Jennings è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Kindle Scribe Colorsoft: riduce le cornici e diventa a colori, ma il prezzo è alto Kindle Scribe Colorsoft: riduce le cornici e div...
L'IA cambia tutte le regole della sicurezza tra vulnerabilità e sorveglianza. Intervista al CEO di Proofpoint L'IA cambia tutte le regole della sicurezza tra ...
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
Rocket Lab acquisisce Iridium: nasce un ...
Una ventola nascosta e un design fuori d...
Display e fotocamera insieme: a Zurigo n...
Lenovo Idea Tab Plus, il tablet per stud...
Un ingegnere di AMD ha riprodotto in cas...
SanDisk Optimus cresce con nuovi SSD cer...
Loongson contro Intel e AMD: dalla Cina ...
Australia, quasi tutti gli under-16 aggi...
Oltre 1.300 miliardi di dollari per la p...
Un nuovo studio mette in dubbio la natur...
Crisi Volkswagen, torna l'ipotesi cessio...
Il CERN spegne il Large Hadron Collider:...
Stranger Than Heaven avrà una storia mol...
Il futuro prezzo di PS6 preoccupa i gioc...
AMD Ryzen 10000 sempre più vicini...
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: 03:47.


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