Comunicazione tra due computer java

di il
1 risposte

Comunicazione tra due computer java

Allora ho un problema
attualmente il mio prof non spiega e ci ha chiesto di creare un progetto dove chiede la comunicazione tra due pc tramite un server tutti e tre sulla stessa lan. Ci ha fornito in piu il programma del server gia fatto ma non ha spiegato neanche la teoria sul come far funzionare tutti e tre i programmi contemporaneamente allego tutto quello che ho per far capire meglio



Esercitazione:
Si vuole realizzare un applicativo Java per gestire la comunicazione testuale tra due utente in rete.
Nello specifico i due utenti devono poter scambiare messaggi di testo e devono poter registrare su
file la conversazione effettuata.

A tal fine si richiede il seguente protocollo di comunicazione:
L'utente identificato come "chiamante", una volta stabilità la comunicazione, invia il suo messaggio
di testo e aspetta la risposta dell'altro utente. Quando un utente desidera comunicare è obbligato
a includere un nickname prima di ogni messaggio inviato.
(Esempio: “MarioRossi89 – ciao come stai?”)
La comunicazione procede in questo modo finché uno dei due non digita la parola "arrivederci" e la
invia all’altro.
Terminata la comunicazione i due utenti salvano, ciascuno su un proprio file di testo, l'intera
comunicazione.

Architettura dell'applicazione:
Realizzare due progetti separati denominati rispettivamente ClientApp, per il processo chiamante,
e ServerApp per quello chiamato.
Ogni processo presenta la possibilità di configurare l'applicazione salvando i dati che ritiene
necessario su di un file denominato "config.txt".

Architettura di rete:
E’ previsto l’utilizzo dell’applicazione sulla stessa rete LAN per i due utenti coinvolti.
La comunicazione tra i due utenti viene realizzata sfruttando una classe CClass e una classe SClass
già implementata. Pertali classi si dispone della documentazione necessaria per il loro utilizzo (firme
dei metodi, dei costruttori e relative funzionalità).
-------------------------------------------------------------------------------------------------------------------------------------------------------------
questo invece e' quello che ho attualmente

CClass da utilizzare nel programma da eseguire su i computers

package clientapp;

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

/**
*
* @author
*/

/**
* La classe gestisce un client socket per connettersi
* ad un servizio in ascolto su una determinata porta
* e su una macchina che svolge il ruolo di server
*/
public class CClass {

/**
* variabili per tenere tracccia dell'IP e della porta
* del servizio in ascolto
*/
private String hostIP;
private int portNumber;

/**
* @param IP indirizzo IP del server
* @param Port porta di ascolto del server
*/
public CClass(String IP, int Port){
hostIP = IP;
portNumber = Port;

}

/**
* @return Restituisce una stringa contenente
* l'indirizzo IP del server
*/
public String gethIP(){
return hostIP;
}

/**
*
* @return Restituisce un intero
* contenente la porta di ascolto del server
*/
public int getPortN(){
return portNumber;
}

/**
*
* @param hname indirizzo IP del server da contattare
* @param pname porta di ascolto
* @return Restituisce un oggetto di tipo Socket
* contenente il canale di comunicazione tra Client e Server
*/
public Socket getConnection(String hname, int pname){
Socket csocket = null;
try{
csocket = new Socket(hname,pname);
}

//Il metodo può generare eccezioni di tipo IO e UnknownHost
catch(UnknownHostException e){
csocket = null;
}
catch(IOException eIO){
csocket = null;
}

return csocket;
}
}

------------------------------------------------------
ServerApp gia funzionare da esguire sul server

package serverapp;

import java.io.*;
import java.net.*;
/**
*
* @author
*/
public class ServerApp {

public static void main(String[] args) throws IOException{
String fraseClient;
String fraseMaiuscola;
boolean arresto;

ServerSocket welcomeSocket = new ServerSocket(6020);
arresto = true;
while(arresto){
Socket socketConnessione = welcomeSocket.accept();

BufferedReader inFromClient =
new BufferedReader(new InputStreamReader(
socketConnessione.getInputStream()));

DataOutputStream outToClient =
new DataOutputStream(
socketConnessione.getOutputStream());

fraseClient = inFromClient.readLine();
fraseMaiuscola = fraseClient.toUpperCase() + '\n';

outToClient.writeBytes(fraseMaiuscola);

if (fraseClient.equals("Arrivederci")){
arresto = false;
socketConnessione.close();
}
}
}

}

grazie in anticipo

1 Risposte

  • Re: Comunicazione tra due computer java

    OFFluke.dev ha scritto:


    Allora ho un problema
    attualmente il mio prof non spiega
    Sì ... questo è già un (bel) problema ...

    OFFluke.dev ha scritto:


    ci ha chiesto di creare un progetto dove chiede la comunicazione tra due pc tramite un server tutti e tre sulla stessa lan.
    [...]
    Si vuole realizzare un applicativo Java per gestire la comunicazione testuale tra due utente in rete.
    Nello specifico i due utenti devono poter scambiare messaggi di testo e devono poter registrare su
    file la conversazione effettuata.
    Qui è bene chiarire una cosa. ServerApp la PUOI(/devi) modificare tu? O quella è stata data così come è senza poterci fare nulla?

    Il punto è che per come hai descritto lo scenario, viene da pensare che:
    - c'è un PC "S" (Server) con la JVM che esegue la classe ServerApp.
    - poi puoi avere un PC "A" con una JVM che esegue la ClientApp
    - e un altro PC "B" distinto (o al limite lo stesso, per prova) con un'altra istanza della JVM che esegue sempre ClientApp.

    E quindi se il client "A" invia qualcosa al server per il client "B", il server dovrebbe avere l'architettura giusta per "girare" il messaggio verso B.

    La questione è: quella classe ServerApp NON sta facendo nulla di tutto questo, non è in grado di far comunicare DUE client distinti. Al momento, ServerApp fa una cosa banale: riceve una stringa, la mette in upper-case e la ributta indietro allo stesso client.
    E oltretutto è solo un server "iterativo", non è nemmeno "concorrente" ("multi-threading").

    E ... quindi??
Devi accedere o registrarti per scrivere nel forum
1 risposte