diff --git a/README.md b/README.md deleted file mode 100644 index 2fe32481e1714a0ade92ad57a33508939e0d8cb0..0000000000000000000000000000000000000000 --- a/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# socket-multithread-java-examples - -Code snippets for socket-based and multi-threaded Java programs. \ No newline at end of file diff --git a/multithread/TCPMultiServer.java b/multithread/TCPMultiServer.java new file mode 100644 index 0000000000000000000000000000000000000000..828e12ad1511753c16239ddd75c037bd27ceaa49 --- /dev/null +++ b/multithread/TCPMultiServer.java @@ -0,0 +1,21 @@ +import java.io.*; +import java.net.*; + +class TCPMultiServer { + + public static void main(String argv[]) throws Exception + { + ServerSocket welcomeSocket = new ServerSocket(6789); + + while(true) { + Socket connectionSocket = welcomeSocket.accept(); + + /* Creazione di un thread e passaggio della established socket */ + TCPServerThread theThread = + new TCPServerThread(connectionSocket); + + /* Avvio del thread */ + theThread.start(); + } + } +} \ No newline at end of file diff --git a/multithread/TCPServerThread.java b/multithread/TCPServerThread.java new file mode 100644 index 0000000000000000000000000000000000000000..8faf68069b2be1e270156366606096adf41a74e9 --- /dev/null +++ b/multithread/TCPServerThread.java @@ -0,0 +1,43 @@ +import java.io.*; +import java.net.*; + +public class TCPServerThread extends Thread { + private Socket connectionSocket = null; + private BufferedReader inFromClient; + private DataOutputStream outToClient; + + /* L'argomento del costruttore e' una established socket */ + public TCPServerThread(Socket s) { + connectionSocket = s; + + try{ + inFromClient = + new BufferedReader( + new InputStreamReader(connectionSocket.getInputStream())); + + outToClient = + new DataOutputStream(connectionSocket.getOutputStream()); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public void run() { + String clientSentence; + String capitalizedSentence; + + try { + + clientSentence = inFromClient.readLine(); + + capitalizedSentence = clientSentence.toUpperCase() + '\n'; + + outToClient.writeBytes(capitalizedSentence); + + connectionSocket.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/tcp/TCPClient.java b/tcp/TCPClient.java new file mode 100644 index 0000000000000000000000000000000000000000..c6441695de2e538012832b82986c3cda818f1d3b --- /dev/null +++ b/tcp/TCPClient.java @@ -0,0 +1,38 @@ +import java.io.*; +import java.net.*; + +class TCPClient { + public static void main(String argv[]) throws Exception { + String sentence; + String modifiedSentence; + + /* Inizializza l'input stream (da tastiera) */ + BufferedReader inFromUser = + new BufferedReader(new InputStreamReader(System.in)); + + /* Inizializza una socket client, connessa al server */ + Socket clientSocket = new Socket("localhost", 6789); + + /* Inizializza lo stream di output verso la socket */ + DataOutputStream outToServer = + new DataOutputStream(clientSocket.getOutputStream()); + + /* Inizializza lo stream di input dalla socket */ + BufferedReader inFromServer = + new BufferedReader(new + InputStreamReader(clientSocket.getInputStream())); + + /* Legge una linea da tastiera */ + sentence = inFromUser.readLine(); + + /* Invia la linea al server */ + outToServer.writeBytes(sentence + '\n'); + + /* Legge la risposta inviata dal server (linea terminata da \n) */ + modifiedSentence = inFromServer.readLine(); + + System.out.println("FROM SERVER: " + modifiedSentence); + + clientSocket.close(); + } +} diff --git a/tcp/TCPServer.java b/tcp/TCPServer.java new file mode 100644 index 0000000000000000000000000000000000000000..c7807f2c2a191979834d2e6196f22f7467833aa0 --- /dev/null +++ b/tcp/TCPServer.java @@ -0,0 +1,41 @@ +import java.io.*; +import java.net.*; + +class TCPServer { + + public static void main(String argv[]) throws Exception + { + String clientSentence; + String capitalizedSentence; + + /* Crea una "listening socket" sulla porta specificata */ + ServerSocket welcomeSocket = new ServerSocket(6789); + + while(true) { + /* + * Viene chiamata accept (bloccante). + * All'arrivo di una nuova connessione crea una nuova + * "established socket" + */ + Socket connectionSocket = welcomeSocket.accept(); + + /* Inizializza lo stream di input dalla socket */ + BufferedReader inFromClient = + new BufferedReader(new + InputStreamReader(connectionSocket.getInputStream())); + + /* Inizializza lo stream di output verso la socket */ + DataOutputStream outToClient = + new DataOutputStream(connectionSocket.getOutputStream()); + + /* Legge una linea (terminata da \n) dal client */ + clientSentence = inFromClient.readLine(); + + capitalizedSentence = clientSentence.toUpperCase() + '\n'; + + /* Invia la risposta al client */ + outToClient.writeBytes(capitalizedSentence); + + } + } +} diff --git a/udp/UDPClient.java b/udp/UDPClient.java new file mode 100644 index 0000000000000000000000000000000000000000..7cfdc3a0e51ab4df04abd1a36ac802a1a9948b2c --- /dev/null +++ b/udp/UDPClient.java @@ -0,0 +1,44 @@ +import java.io.*; +import java.net.*; + +class UDPClient { + public static void main(String args[]) throws Exception { + /* Inizializza l'input stream (da tastiera) */ + BufferedReader inFromUser = + new BufferedReader(new InputStreamReader(System.in)); + + /* Crea una datagram socket */ + DatagramSocket clientSocket = new DatagramSocket(); + + /* Ottiene l'indirizzo IP dell'hostname specificato + * (contattando eventualmente il DNS) */ + InetAddress IPAddress = InetAddress.getByName("localhost"); + + byte[] sendData = new byte[1024]; + byte[] receiveData = new byte[1024]; + + String sentence = inFromUser.readLine(); + sendData = sentence.getBytes(); + + /* Prepara il pacchetto da spedire specificando + * contenuto, indirizzo e porta del server */ + DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, + IPAddress, 9876); + + /* Invia il pacchetto attraverso la socket */ + clientSocket.send(sendPacket); + + /* Prepara la struttura dati usata per contenere il pacchetto in ricezione */ + DatagramPacket receivePacket = + new DatagramPacket(receiveData, receiveData.length); + + /* Riceve il pacchetto dal server */ + clientSocket.receive(receivePacket); + + String modifiedSentence = new String(receivePacket.getData()); + + System.out.println("FROM SERVER:" + modifiedSentence); + clientSocket.close(); + } +} + diff --git a/udp/UDPServer.java b/udp/UDPServer.java new file mode 100644 index 0000000000000000000000000000000000000000..1d4dd5eb1d2dd507af0961b882894ed719b32ddc --- /dev/null +++ b/udp/UDPServer.java @@ -0,0 +1,43 @@ +import java.io.*; +import java.net.*; + +class UDPServer { + public static void main(String args[]) throws Exception { + /* Inizializza la datagram socket specificando la porta di ascolto */ + + DatagramSocket serverSocket = new DatagramSocket(9876); + + byte[] receiveData = new byte[1024]; + byte[] sendData = new byte[1024]; + + while(true) + { + + /* Prepara la struttura dati usata per contenere il pacchetto in ricezione */ + DatagramPacket receivePacket = + new DatagramPacket(receiveData, receiveData.length); + + /* Riceve un pacchetto da un client */ + serverSocket.receive(receivePacket); + + String sentence = new String(receivePacket.getData()); + + /* Ottiene dal pacchetto informazioni sul mittente */ + InetAddress IPAddress = receivePacket.getAddress(); + int port = receivePacket.getPort(); + + String capitalizedSentence = sentence.toUpperCase(); + + sendData = capitalizedSentence.getBytes(); + + /* Prepara il pacchetto da spedire specificando + * contenuto, indirizzo e porta del destinatario */ + DatagramPacket sendPacket = + new DatagramPacket(sendData, sendData.length, IPAddress, + port); + + /* Invia il pacchetto attraverso la socket */ + serverSocket.send(sendPacket); + } + } +}