ok, grazie
sono arrivato a scrivere questo:
codice:
import java.io.*;
import java.net.*;
import java.applet.*;
public class UDPClient extends Applet{
public static final String HOSTNAME = "localhost";
public static final int PORT = 6769;
public static void main(String[] args) {
String host ="";
int port = PORT;
/**************************************RICEZIONE**************************************/
try {
// creo il socket
DatagramSocket serverSocket = new DatagramSocket(PORT);
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
while (true){
// istanzio il datagramma in input
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
// ricevo il datagramma dal socket
serverSocket.receive(receivePacket);
// recupero la frase
String frase = new String(receivePacket.getData());
// indirizzo ip
InetAddress iPAddress = receivePacket.getAddress();
// porta
//int port = receivePacket.getPort();
// modifico la porta
String fraseModificata = frase.toUpperCase();
// trasformo in byte
sendData = fraseModificata.getBytes();
// creo un datagramma per inviare al client
DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,iPAddress,port);
//scrivo il datagramma sul socket
serverSocket.send(sendPacket);
}
}catch(SocketException e){
System.out.println("Problemi nell'apertura del socket "+e.getMessage());
}catch(IOException e){
System.out.println("Problemi di I/O : "+e.getMessage());
}
/**************************************INVIO**************************************/
if (args.length==0){
System.out.println("Parametri di default.");
System.out.println("Host : "+HOSTNAME);
host = HOSTNAME;
}else{
if (args.length==1){
host = args[0];
}
if (args.length==2){
host = args[0];
port = new Integer(args[1]).intValue();
}
}
// buffer di input del client
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
try{
// creo il socket client
DatagramSocket clientSocket = new DatagramSocket();
// creo l'indirizzo ip
InetAddress IPAddress = InetAddress.getByName(host);
byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];
String frase = inFromUser.readLine();
sendData = frase.getBytes();
// creo un datagramma con i dati da inviare, lunghezza, ip e porta
DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,port);
// invio il datagramma al server
clientSocket.send(sendPacket);
// credo un pacchetto
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
clientSocket.receive(receivePacket);
// frase ricevuta dal server
String fraseModificata = new String(receivePacket.getData());
System.out.println("Frase ricevuta : "+fraseModificata);
// chiudo il socket
clientSocket.close();
}catch(SocketException e){
System.out.println("Problemi con il socket : "+e.getMessage());
}catch(UnknownHostException e){
System.out.println("Host sconosciuto : "+e.getMessage());
}catch (IOException e){
System.out.println("I/O exception : "+e.getMessage());
}
}
}
ma non va, mi dice:
Problemi nell'apertura del socket Address already in use: Cannot bind
ho unito la ricezione e l'invio nella stessa classe perchè mi serve che l'applet invii e riceva i messaggi. ho anche commentato:
int port = receivePacket.getPort();
perchè unendo i codici non serve che la ricezione setti la porta siccome è già stata definita all'inizio.
Provo anche ad ottimizzare un pò il codice perxhè c'è un pò di ridondanza