Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500

    comunicazione tramite socket

    Ciao a tutti mi sto avvicinando un pò ai socket e ho provato a scrivere un pò di codice aiutandomi dal libro. una cosa che però non capisco è come vengono ricevuti i bytes e come si possono convertire in stringhe.
    posto qua sotto il codice del server:
    codice:
    import java.io.IOException;
    import java.io.InputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    public class Main_socket {
    
    	public static final int PORT = 7890;
    	
    	public static void main(String[] args) throws IOException {
    		
    		
    	ServerSocket server = new ServerSocket(PORT);
    	byte[] bytes = new byte[1024];
    	String str_input = "";
    		
    	for ( ;; ) {
    		try {
    			System.out.println("In attesa della connessione...");
    			Socket sock = server.accept();
    			System.out.println("Connessione avvenuta con successo con: " + sock.getInetAddress().getHostName());
    			System.out.println("Channel: " + sock.getInetAddress()+" "+ sock.getPort());
    			System.out.println("Connessione accettata sulla porta " + PORT);
    			InputStream in = sock.getInputStream();
    			int len;
    			while ( (len=in.read(bytes)) > 0 ) {
    				System.out.write(bytes, 0, len);
    				// str_input = new String( bytes, "UTF-8" );
    				// System.out.println(str_input);
                                    // System.out.print("-");
    				
    			}
    			
    			in.close();
    			
    		} catch ( IOException e ) {
    			e.printStackTrace();
    		}		
    		
    	}
    		
    	}
    	
    }
    non ho ben capito come funziona la lettura dei bytes che arrivano, perchè provando a scrivere "ciao" dal client(situato su un'altra macchina) , attivando la System.out.print("-"); vedo che stampa(solo dopo aver dato invio):
    codice:
    c-iao-
    quindi significa che arriva il primo carattere e viene eseguita la prima write, poi la System.out.print("-"); e poi vengono ricevuti gli ultimi 3 caratteri e viene rieseguita la System.out.print("-");.
    Inoltre non ho capito come passare da byte a stringa, ho provato con str_input = new String( bytes, "UTF-8" ); ma mi stampa caratteri strani...anzi sempre un quadrato ripetuto tantissime volte!
    grazie per l'aiuto!
    ciao
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: comunicazione tramite socket

    Originariamente inviato da MrX87
    come si possono convertire in stringhe.
    Dipende. Innanzitutto il socket ti fornisce oggetti InputStream/OutputStream. Se il tuo "protocollo" di comunicazione fosse testuale puro (quindi per esempio i due host si scambiano "righe" di testo), potresti incapsulare i due stream rispettivamente in un InputStreamReader/OutputStreamWriter (e nota, specificando un charset ben preciso, visto che potenzialmente sono macchine diverse la codifica dei caratteri la devi imporre tu) e poi se vuoi ragionare "a righe" a loro volta metterli dentro BufferedReader/BufferedWriter.

    Se il protocollo fosse "binario" con certi blocchi di byte sparsi qua e là che rappresentano una stringa, beh, ci sono svariati costruttori di String che ricevono un byte[]. Anche qui centra il charset.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.