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):
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