Creare una comunicazione usando i socket – JAVA(client) e PHP(server)

socketCreare una comunicazione usando i socket

L'aspetto importante dell'informatica è sicuramente lo scambio di informazioni, perchè un computer che non ha la possibilità di ricevere e di mandare dati è come se teniamo il nostro computer chiuso in una scatola. Una delle tecniche tra le più usate nell'ambito della rete è la comunicazione via socket che si trova nel livello 4 del modello ISO/OSI.
Il socket lavora usando principalmente 2 fondamentali protocolli:

  • UDP User Datagram Protocol
  • TCP Transfer Control Protocol

Nel nostro esempio useremo il protocollo TCP perchè punteremo alla affidabilità per scambiare i messaggi, alla creazione del socket che farà da server dobbiamo dire quale sarà l'indirizzo e quale sarà la porta.

server.php:
$indirizzo = "127.0.0.1";
$porta = "20000";
// rimuovo il timeout
set_time_limit(0);
// creazione
$sock = socket_create(AF_INET, SOCK_STREAM, 0) or die("Errore creazione\n". .socket_strerror(socket_last_error()));
// bind alla porta
$result = socket_bind($sock, $indirizzo, $porta) or die("Errore bind\n" . .socket_strerror(socket_last_error()));
// metto in ascolto
$result = socket_listen($sock, 3) or die("Errore ascolto\n" .socket_strerror(socket_last_error()));
while(true){
	// accetto la connessione
	$client = socket_accept($sock) or die("Could not accept incoming connection\n");
	// input del client
	$input = socket_read($client, 1024) or die("Errore input\n" .socket_strerror(socket_last_error()));

	$input = trim($input);
	socket_getpeername($client , $address , $port);
	echo $address.":".$port."=".$input."\n";
        $output = "ricevuto\n";
	socket_write($client, $output) or die("Errore output\n".socket_strerror(socket_last_error()));
    socket_close($client);
}
socket_close($sock);
client.java:

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

public class Client extends Thread {
    private static String msg;
    private boolean avvia; 
    private String result;
    
    public Client(String msg){
		// prendo il messaggio
        this.msg = msg + "\n";
        System.out.println(msg);
        avvia = false;
        result = "";
    }
    
    @Override
    public void run(){
        String hostName = "127.0.0.1";
        int portNumber = Integer.parseInt("20000");
        String rcv;
        
        if(avvia){
            try {
				// apro una connessione con il server
                Socket server = new Socket(hostName, portNumber);
				
				// acquisisco lo stream di output
                PrintWriter out =
                    new PrintWriter(server.getOutputStream(), true);
            
				// invio il messaggio
                out.println(msg);
				
				// acquisisco lo stream di input
                BufferedReader in =
                        new BufferedReader(
                            new InputStreamReader(server.getInputStream()));
                // Aspetto la risposta
				// il metodo readLine() blocca l'esecuzione 
				// del thread fino alla ricevuta 
				// della risposta dal server
                result = in.readLine();
				
                server.close();
            }catch(UnknownHostException e) {
                System.out.println("host sconosciuto: " + hostName);
                System.exit(-1);
            }catch(IOException e) {
                System.out.println("No I/O");
                System.exit(-1);
            }
            avvia = false;
        }
    }
    
    public String invia(){
        avvia = true;
        try{
            join();
        }catch(Exception e){
            e.printStackTrace();
        }
        return result;
    }
    
    public static void main(String[] args){
        Client c = new Client("Ciao Mondo");
        c.start();
        System.out.println(c.invia());
    }
    
}

 

Precedente Steganografia in un'immagine jpeg - JAVA Successivo Spooler di stampa - C (linux)