Salve amici, sto provando ad implementare un client-server con protocollo UDP.
Il funzionamento è il seguente: il client prende da tastiera due numeri interi, il server legge questi numeri li somma e manda il risultato al client, il quale lo stampa.
Il problema che sto riscontrando sta nel passaggio di questi interi agli array, mi hanno consigliato di utilizzare ByteArrayInputStream e ByteArrayOutputStream però sinceramente non li ho mai utilizzati e per questo non so come usarli.
Il codice che avevo scritto è il seguente però mi stampa valori sballati
CLIENT
SERVER
Grazie in anticipo a chiunque mi risponderà
Il funzionamento è il seguente: il client prende da tastiera due numeri interi, il server legge questi numeri li somma e manda il risultato al client, il quale lo stampa.
Il problema che sto riscontrando sta nel passaggio di questi interi agli array, mi hanno consigliato di utilizzare ByteArrayInputStream e ByteArrayOutputStream però sinceramente non li ho mai utilizzati e per questo non so come usarli.
Il codice che avevo scritto è il seguente però mi stampa valori sballati
CLIENT
Codice:
import java.io.ByteArrayOutputStream;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
public class SumClientUDP {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
// creiamo la socket
DatagramSocket clientSocket = new DatagramSocket();
// indirizzo IP della macchina su cui è avviato il processo
InetAddress IPAddress = InetAddress.getLocalHost();
System.out.println(IPAddress);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] toSend = baos.toByteArray();
byte[] sendData; // = new byte[1024];
byte[] receiveData = new byte[1024];
// leggiamo la stringa
System.out.println("Effettua la somma di due numeri...");
System.out.println("Digita il primo numero: ");
String a = sc.nextLine();
System.out.println("Digita il secondo numero: ");
String b = sc.nextLine();
// trasformiamo la stringa in array di byte
sendData = a.getBytes();
sendData = b.getBytes();
// specifichiamo l'indirizzo di trasporto del server
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1200);
clientSocket.send(sendPacket);
// devo predispormi alla ricezione della risposta
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
String sum = new String(receivePacket.getData());
System.out.println("La somma è : " + sum);
clientSocket.close();
}
}
SERVER
Codice:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class SumServerUDP {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// creiamo la socket con numero di porta 1200
DatagramSocket serverSocket = new DatagramSocket(1200);
// dobbiamo creare l'array di byte su cui verranno ricevuti e inviati i dati
byte[] receiveData = new byte[1024];
byte[] sendData;// = new byte[1024];
while(true) {
// creiamo una struttura DatagramPacket per riversare i dati letti
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
// leggiamo lo standard input
serverSocket.receive(receivePacket);
// fino a questo momento abbiamo i byte, questi li dobbiamo trasformare in
// stringa; si utilizzano i vari metodi
String a = new String(receivePacket.getData(), 0, receivePacket.getLength());
String b = new String(receivePacket.getData(), 0, receivePacket.getLength());
// effetto la somma
String sum = a + b;
// ritrasformiamo la stringa in array di byte per poterla spedire
sendData = sum.getBytes();
// specifichiamo l'indirizzo IP
InetAddress IPAddress = receivePacket.getAddress();
// e il numero di porta
int port = receivePacket.getPort();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
}
}
}
Grazie in anticipo a chiunque mi risponderà