The.Beat.83
2006-03-25 14:30:33 UTC
Ciao a tutti, mi servirebbe un aiuto con un esercizio di reti da
svolgere con Java. Sono alle prime armi sia con Java che con la
programmazione per i socket di rete..
Dovrei realizzare un server che permetta di eseguire un chat testuale
tra due client.
Se non ho capito sbagliato, la parte più importante è il server, che
riceve una stringa da un client e la ridireziona verso l'altro client
collegato.
Attualmente ho disponibile il codice esempio di un client che invia una
stringa alfanumerica verso un server, questo la legge e rimanda il
medesimo messaggio mettendo però le lettere in maiuscolo.
Il client non mi sembra quindi da modificare, perchè la parte di
letture dei dati scritti dall'utente e spedizione verso il server già
la esegue.
Il server di esempio però rimandava la stringa verso il clientr di
partenza, mentre nell'esercizio che devo svolgere, deve rimandarla
all'altro client.
Il client conosce in anticipo l'indirizzo ip del server.
Come posso modificare il codice per far si che si possa fare ciò ?
Metto qui sotto i codici del client e il codice del server che ho come
esempio
"code:SERVER"
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6860);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
System.out.println("connesso con " +
connectionSocket.getInetAddress());
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient =
new
DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println("FROM CLIENT: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() +
'\n';
System.out.println("TO CLIENT: " + capitalizedSentence);
outToClient.writeBytes(capitalizedSentence);
}
}
}
- - - - - - -
" code:CLIENT "
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
for (int i=0; i < argv.length; i++)
System.out.println("argv[" + i + "]" + argv[i]);
Socket clientSocket = new Socket(argv[0], 6860);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}
svolgere con Java. Sono alle prime armi sia con Java che con la
programmazione per i socket di rete..
Dovrei realizzare un server che permetta di eseguire un chat testuale
tra due client.
Se non ho capito sbagliato, la parte più importante è il server, che
riceve una stringa da un client e la ridireziona verso l'altro client
collegato.
Attualmente ho disponibile il codice esempio di un client che invia una
stringa alfanumerica verso un server, questo la legge e rimanda il
medesimo messaggio mettendo però le lettere in maiuscolo.
Il client non mi sembra quindi da modificare, perchè la parte di
letture dei dati scritti dall'utente e spedizione verso il server già
la esegue.
Il server di esempio però rimandava la stringa verso il clientr di
partenza, mentre nell'esercizio che devo svolgere, deve rimandarla
all'altro client.
Il client conosce in anticipo l'indirizzo ip del server.
Come posso modificare il codice per far si che si possa fare ciò ?
Metto qui sotto i codici del client e il codice del server che ho come
esempio
"code:SERVER"
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception
{
String clientSentence;
String capitalizedSentence;
ServerSocket welcomeSocket = new ServerSocket(6860);
while(true) {
Socket connectionSocket = welcomeSocket.accept();
System.out.println("connesso con " +
connectionSocket.getInetAddress());
BufferedReader inFromClient =
new BufferedReader(new
InputStreamReader(connectionSocket.getInputStream()));
DataOutputStream outToClient =
new
DataOutputStream(connectionSocket.getOutputStream());
clientSentence = inFromClient.readLine();
System.out.println("FROM CLIENT: " + clientSentence);
capitalizedSentence = clientSentence.toUpperCase() +
'\n';
System.out.println("TO CLIENT: " + capitalizedSentence);
outToClient.writeBytes(capitalizedSentence);
}
}
}
- - - - - - -
" code:CLIENT "
import java.io.*;
import java.net.*;
class TCPClient {
public static void main(String argv[]) throws Exception
{
String sentence;
String modifiedSentence;
BufferedReader inFromUser =
new BufferedReader(new InputStreamReader(System.in));
for (int i=0; i < argv.length; i++)
System.out.println("argv[" + i + "]" + argv[i]);
Socket clientSocket = new Socket(argv[0], 6860);
DataOutputStream outToServer =
new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer =
new BufferedReader(new
InputStreamReader(clientSocket.getInputStream()));
sentence = inFromUser.readLine();
outToServer.writeBytes(sentence + '\n');
modifiedSentence = inFromServer.readLine();
System.out.println("FROM SERVER: " + modifiedSentence);
clientSocket.close();
}
}