Torna indietro   Hardware Upgrade Forum > Software > Programmazione

TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita
TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita
TCL P80 Ultra abbina per la prima volta un pannello AMOLED alla tecnologia NXTPAPER con finitura opaca, affiancandoci una fotocamera periscopica da 50 MP con zoom ottico 3x, il SoC Dimensity 7400 Elite e una batteria da 5.800 mAh. Nella prova sul campo emergono luminosità di picco molto elevata, comparto fotografico solido per la fascia di prezzo e autonomia nella media, a fronte di velocità di scrittura dello storage piuttosto contenute
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio
HUAWEI MatePad Air combina diverse carte molto interessanti: un OLED PaperMatte da 12 pollici, un corpo sottile e una tastiera molto comoda. Durante la prova abbiamo apprezzato fluidità, audio e comfort visivo, mentre i test hanno chiarito pregi e qualche limite nelle prestazioni. L'autonomia ha convinto anche nell'uso intermittente; la scelta passa dalla compatibilità delle proprie app e dal valore del pacchetto con accessori, proposto a 749 euro
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica
Debuttano ufficialmente i primi sistemi notebook basati su piattaforma NVIDIA RTX Spark, abbinati a Windows on ARM e pensati per l'intelligenza artificiale agentica. Architettura integrata tra CPU e GPU che condividono la memoria di sistema, capace di gestire in locale modelli molto grandi ma al contempo anche di spiccare con la grafica e l'elaborazione
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-05-2004, 18:38   #1
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
[JAVA]socket e newsreader

ho deciso un pò per gioco, un pò per curiosità di voler creare un newsreader in java ma ho qualche problema con l'utilizzo del socket:

Codice:
public class TCPClient {
  
  
    public void start()throws IOException {
      
        //Connessione della Socket con il Server
        Socket socket = new Socket("news.tin.it", 119);

        //Stream di byte da passare al Socket
        DataOutputStream os = new DataOutputStream(socket.getOutputStream());
        DataInputStream is = new DataInputStream(socket.getInputStream());
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

        //Ciclo infinito per inserimento testo del Client
        while (true) {
          
           System.out.println(is.readLine());
           System.out.print("Inserisci: ");
           String userInput = stdIn.readLine();
           
           //esco dal ciclo se digito quit
           if  (userInput.equals("QUIT"))
              break;
            
           os.writeBytes(userInput + '\n');
           System.out.println(is.readLine());
        }

        //Chiusura dello Stream e del Socket
        os.close();
        is.close();
        socket.close();
   }
   
   
   public static void main (String[] args) throws Exception {
        TCPClient tcpClient = new TCPClient();
        tcpClient.start();
   }
   
   
}
Questo codice si collega al server delle news di tin.it alla porta 119 .......la connessione come vedete funziona dato che il server risponde ma non riesco a capire come mai quando digito un comando il programma si blocca rimanendo cmq in esecuzione senza segnalare niente (neanche un errore)!

per esempio se dal prompt del dos prova a digitare "telnet news.tin.it 119" comparirà la scritta "200 news.tin.it (Twister v1.2.0)", poi magari scrivendo "help" puosso sapere i comandi per naviagare nel server delle news ........con il socket java invece ogni comando mi blocca il programma!

sapete mica cosa può essere?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 01-06-2004, 13:41   #2
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
il server news è esigente quanto al carattere terminatore.


Per risolvere, questo:

Codice:
os.writeBytes(userInput + '\n');
diventa:

Codice:
os.writeBytes(userInput + '\r' + '\n');
os.flush();
Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2004, 11:29   #3
LukeHack
Bannato
 
L'Avatar di LukeHack
 
Iscritto dal: May 2003
Città: Roma
Messaggi: 3642
Quote:
Originariamente inviato da PGI
il server news è esigente quanto al carattere terminatore.


Per risolvere, questo:

Codice:
os.writeBytes(userInput + '\n');
diventa:

Codice:
os.writeBytes(userInput + '\r' + '\n');
os.flush();
Ciao.
come mai l'uso di \r è necessario?
LukeHack è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2004, 12:37   #4
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Questo non lo so.

Il terminatore di linea pare dipendere dal sistema operativo (secondo la documentazione Java).

Non sempre un "\n" va bene per l'OS (ma va sempre bene per Java).

Si può notare quando cerchi di scrivere un file di testo e termini le linee con "\n" anzichè System.getProperty("line.separator"). Usando Notepad (in Windows) per aprire il file si nota come vi sia una linea unica (del "\n" se ne frega). Wordpad al contrario digerisce tutto. Per Unix invece non ci sono problemi.

Ho pensato che il servizio news rispondesse ad una logica simile e così "ho provato". Mi è andata bene.

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2004, 13:57   #5
LukeHack
Bannato
 
L'Avatar di LukeHack
 
Iscritto dal: May 2003
Città: Roma
Messaggi: 3642
Quote:
Originariamente inviato da PGI
Questo non lo so.

Il terminatore di linea pare dipendere dal sistema operativo (secondo la documentazione Java).

Non sempre un "\n" va bene per l'OS (ma va sempre bene per Java).

Si può notare quando cerchi di scrivere un file di testo e termini le linee con "\n" anzichè System.getProperty("line.separator"). Usando Notepad (in Windows) per aprire il file si nota come vi sia una linea unica (del "\n" se ne frega). Wordpad al contrario digerisce tutto. Per Unix invece non ci sono problemi.

Ho pensato che il servizio news rispondesse ad una logica simile e così "ho provato". Mi è andata bene.

Ciao.
capisco, ma se \n è l'accapo, \r in teoria a cosa serve?
LukeHack è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2004, 19:10   #6
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
"\r" sta per "ritorno carrello" (termini da Olimpia...). Il cursore torna (a volte...) al punto di partenza, sulla stessa linea.

\r serve se \n non basta, nel senso che il sistema richiede la combinazione dei due caratteri come messaggio "hey, è finita la linea!".
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 03-06-2004, 23:39   #7
LukeHack
Bannato
 
L'Avatar di LukeHack
 
Iscritto dal: May 2003
Città: Roma
Messaggi: 3642
Quote:
Originariamente inviato da PGI
"\r" sta per "ritorno carrello" (termini da Olimpia...). Il cursore torna (a volte...) al punto di partenza, sulla stessa linea.

\r serve se \n non basta, nel senso che il sistema richiede la combinazione dei due caratteri come messaggio "hey, è finita la linea!".
grazie,buono a sapersi
LukeHack è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2004, 15:46   #8
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
aggiungendo la /r adesso funziona ....il problema però è quando vado a leggere: in pratica utilizzando il metodo .readline mi legge solo la prima riga della risposta del server ....provando invece a utilizzare il metodo .read convertendo successivamente in char mi si presenta di nuovo il problema che si blocca
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2004, 21:23   #9
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
E' lo stesso problema, solo "invertito". Occorre cercare di capire quale sia il carattere terminatore inviato dal server al client per dire "ho finito di parlare".

Ma stò server news non ha una documentazione?

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2004, 21:38   #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
Tutti i servizi di Internet richiedono \r\n come terminatori di linea... Ad esempio anche l'HTTP...
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2004, 21:46   #11
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Quote:
Originariamente inviato da PGI
E' lo stesso problema, solo "invertito". Occorre cercare di capire quale sia il carattere terminatore inviato dal server al client per dire "ho finito di parlare".

Ma stò server news non ha una documentazione?

Ciao.
ma io vado a leggere l'oggetto inputstream ....cosa centra il carattere che mando al server quando sono in lettura?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2004, 22:39   #12
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Tu sei il client, lui è il server.

Qui c'entra il simbolo con cui il server indica che ha terminato di trasmettere i dati.

Hai detto che fai un readLine sull'input e ti legge una linea.

Se il messaggio fosse composto da una sola linea, otterresti lo stesso risultato (blocco apparente) di quello che ottieni cercando di leggere un carattere per volta.

Questo perchè non intercetti il terminatore del flusso dati.

Scopri qual'è e hai risolto il problema.

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 06-06-2004, 23:10   #13
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Quote:
Originariamente inviato da PGI
Tu sei il client, lui è il server.

Qui c'entra il simbolo con cui il server indica che ha terminato di trasmettere i dati.

Hai detto che fai un readLine sull'input e ti legge una linea.

Se il messaggio fosse composto da una sola linea, otterresti lo stesso risultato (blocco apparente) di quello che ottieni cercando di leggere un carattere per volta.

Questo perchè non intercetti il terminatore del flusso dati.

Scopri qual'è e hai risolto il problema.

Ciao.
mettiamo che il terminatore di linea è un punto "." ...come dovrei fare per indicarglielo al server?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 10:29   #14
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Provo a spiegarmi meglio.

Poichè stai leggendo dal server non puoi indicare nulla. Devi solo interpretare i dati che il server news invia al tuo client. Tra questi c'è un carattere che indica che il messaggio è finito.

Secondo me hai bisogno di sapere qual'è quel carattere per poter dire al ciclo di lettura di terminare.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 12:10   #15
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
Frank1962: il server rispetta delle specifiche date in una RFC... Le specifiche indicano quale debba essere *obbligatoriamente* il terminatore di un messaggio...

Ecco l'RFC 977: http://www.freesoft.org/CIE/RFC/977/
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 16:21   #16
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Quote:
Originariamente inviato da PGI
Provo a spiegarmi meglio.

Poichè stai leggendo dal server non puoi indicare nulla. Devi solo interpretare i dati che il server news invia al tuo client. Tra questi c'è un carattere che indica che il messaggio è finito.

Secondo me hai bisogno di sapere qual'è quel carattere per poter dire al ciclo di lettura di terminare.
allora, spulciando la RFC sono riuscito a capire/trovare/captare/ecc.. quale sia questo maledetto segno di terminazione del messaggio --> " \r\n.\r\n " ..che in codice ASCII equivale alla sequenza di byte: " 13-10-46-13-10 " !!

devo ancora capire come mai quei 9 caratteri mi vengono codificati in ASCII con soli 5 byte!

cmq come faccio a far leggere lo stream dei dati senza che mi si blocchi il prg? ....cioè potrei implementare un algoritmo ultracomplesso che mi vadi a controllare gli ultimi 5 byte letti ma mi sembra troppo lamma come soluzione ........non c'è qualche metodo ad hoc che mi permetta di far ciò ?

ps: come mai il metodo readline me lo segna come "deprecated" ?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 07-06-2004, 16:44   #17
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 Frank1962
allora, spulciando la RFC sono riuscito a capire/trovare/captare/ecc.. quale sia questo maledetto segno di terminazione del messaggio --> " \r\n.\r\n " ..che in codice ASCII equivale alla sequenza di byte: " 13-10-46-13-10 " !!

devo ancora capire come mai quei 9 caratteri mi vengono codificati in ASCII con soli 5 byte!
Guarda che qulli non sono 9 caratteri, ma solamente 5... \n è un solo carattere...

Semplicemente:
if(buf[n-1] == '\n' && buf[n-2] == '\r' && buf[n-3] == '.' buf[n-4] == '\n' && buf[n-5] == '\r')
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2004, 02:11   #18
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
si in effetti avevo capito già prima che il terminatore poteva essere in pratica quel punto tra 2 "a capo" però ho scartato l'idea perchè pensavo fosse banale come soluzione ....cioè se uno posta una messaggio su un newsgroup con in mezzo un set di caratteri uguale a quelli del terminatore che succede? ...il server/client salva solo metà msg?

cmq ho buttato giù questo codice in sostituzione al metodo readline che usavo prima:

Codice:
public String leggiInput() {


     int count = 0;
     boolean go = true;
     Vector vect = new Vector();
     
     
     try {

       while(go) {

         vect.add(""+is.readByte());

         if(count > 4) {
           
           if( (char)(Integer.parseInt((String)vect.get(count-0))) == '\n' )
             if( (char)(Integer.parseInt((String)vect.get(count-1))) == '\r' )
               if( (char)(Integer.parseInt((String)vect.get(count-2))) == '.' )
                 if( (char)(Integer.parseInt((String)vect.get(count-3))) == '\n' )
                   if( (char)(Integer.parseInt((String)vect.get(count-4))) == '\r' )
                     go = false;              
         }
         
         count++;
       }

     } catch(Exception e) { System.out.println(e); }
     
     
     Object[] arrayObject = vect.toArray();
     char[] arrayChar = new char[arrayObject.length];
     
     for(int i=0;i<arrayObject.length;i++) {
       arrayChar[i] = (char)(Integer.parseInt((String)arrayObject[i])); 
     }
     
     String msgText = new String(arrayChar);
     return msgText;
   }
...non sò perchè ma mi sembra di aver scritto una boiata sia per lunghezza che per complessità non necessaria ....oltretutto perchè mi traduce il carattere "è" come una "?" !!?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2004, 03:49   #19
LukeHack
Bannato
 
L'Avatar di LukeHack
 
Iscritto dal: May 2003
Città: Roma
Messaggi: 3642
Quote:
Originariamente inviato da Frank1962
si in effetti avevo capito già prima che il terminatore poteva essere in pratica quel punto tra 2 "a capo" però ho scartato l'idea perchè pensavo fosse banale come soluzione ....cioè se uno posta una messaggio su un newsgroup con in mezzo un set di caratteri uguale a quelli del terminatore che succede? ...il server/client salva solo metà msg?

cmq ho buttato giù questo codice in sostituzione al metodo readline che usavo prima:
innanzi tutto fai troppi cast,perchè usi Vector se poi lo riduci a char[]?
usa direttamente String no? gia risparmieresti belle righe di casting inutile...
poi vabbè,l'uso del DataInputStream io lo sostituirei con un buffered,più efficiente il controllo che poi esegui,sulla stringa per cercare i caratteri terminatori, è ridondante (per essere eufemistici)
Codice:
 StringBuffer s=new StringBuffer();
int count=0;
  while(go) {

        s= s.append((char) is.readByte());

         if(count > 4) {
           
           if( (s.charAt(count)== '\n' )&&(  s.charAt(count-1) == '\r' )&&
            if( s.charAt(count-2)== '.' )&& (s.charAt(count-3)== '\n' )
             &&(  s.charAt(count-4)== '\r' )  )
                     go = false;              
         }
         
         count++;
       }

       return s.subString(0,count);
}
se non ho scritto fesserie vista l'ora dovrebbe andare

Ultima modifica di LukeHack : 08-06-2004 alle 04:17.
LukeHack è offline   Rispondi citando il messaggio o parte di esso
Old 08-06-2004, 08:33   #20
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 Frank1962
si in effetti avevo capito già prima che il terminatore poteva essere in pratica quel punto tra 2 "a capo" però ho scartato l'idea perchè pensavo fosse banale come soluzione ....cioè se uno posta una messaggio su un newsgroup con in mezzo un set di caratteri uguale a quelli del terminatore che succede? ...il server/client salva solo metà msg?
Prova a mettercelo... Ora non mi ricordo come si comportano il POP3 e l'SMTP...entrambi usano lo stesso emtodo per terminare i messaggi... Infatti se spedisci un messaggio di posta in PLAIN TEXT riesci a vedere anche il punto in fondo
Comunque credo che il comportamento in questi casi sia a discrezione del mail client...ad esempio potrebbero sostituire ogni sequenza del genere con due punti...oppure se è un messaggio HTML con una codifica del punto... Fai una prova e guarda cosa ricevi
cionci è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


TCL P80 Ultra: con un display AMOLED opaco è una gioia per gli occhi e per le dita TCL P80 Ultra: con un display AMOLED opaco &egra...
HUAWEI MatePad Air recensione: OLED opaco e tastiera dedicata per lavorare meglio HUAWEI MatePad Air recensione: OLED opaco e tast...
NVIDIA RTX Spark: il PC Windows on ARM costruito per l'IA agentica NVIDIA RTX Spark: il PC Windows on ARM costruito...
Motorola razr fold, dalla conchiglia al formato a libro. La recensione Motorola razr fold, dalla conchiglia al formato ...
Recensione Google Pixel Watch 5: sembra lo stesso, ma al polso la differenza si sente Recensione Google Pixel Watch 5: sembra lo stess...
XPENG porta Google Play a bordo: app e i...
Bestseller auricolari Amazon: i 5 modell...
Il satellite spia russo Kosmos 2612 si s...
CrowdStrike mette l’IA contro l’IA: un m...
SAP NOW AI Tour, l'impresa autonoma pass...
Amazon Luna arriva su Prime Video: cloud...
HomeView, Apple pensa già al braccio rob...
Foto reale scartata come fake: Truebees ...
Jim Keller accelera su RISC-V e intellig...
Tutte le migliori offerte Amazon di oggi...
La bancarotta di Character.AI diventa un...
SanDisk Extreme da 128 GB a 31,96€ su Am...
Termoventilatori Dreo e Philips in offer...
Una ASUS ROG Astral RTX 5090 come regalo...
iPad Air 11'' M4 a 999€ con 256 GB su Am...
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: 07:04.


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