Client/Server UDP - JAVA

  • Creatore Discussione Creatore Discussione macGigi
  • Data di inizio Data di inizio

macGigi

Nuovo Utente
16 Ott 2013
1
0
0
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

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à
 
import java.io.*;
import java.net.*;
import java.util.Scanner;


public class SumClientUDP {
public static void main(String[] args) throws Exception {

Scanner inFromUser = new Scanner(System.in);

DatagramSocket clientSocket = new DatagramSocket();

InetAddress IPAddress = InetAddress.getLocalHost();

byte[] sendData = new byte[1024];
byte[] receiveData = new byte[1024];

ByteArrayOutputStream byteSend = new ByteArrayOutputStream();
DataOutputStream send = new DataOutputStream(byteSend);
ByteArrayInputStream byteReceive;

int a, b, total;

System.out.println("Enter first number: ");
a = inFromUser.nextInt();
send.writeInt(a);

System.out.println("Enter second number: ");
b = inFromUser.nextInt();
send.writeInt(b);

sendData = byteSend.toByteArray();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 1200);
clientSocket.send(sendPacket);
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
clientSocket.receive(receivePacket);
byteReceive = new ByteArrayInputStream(receivePacket.getData());
DataInputStream receive = new DataInputStream(byteReceive);
total = receive.readInt();
System.out.println("Their sum is " + total);
clientSocket.close();
}
}
 
import java.io.*;
import java.net.*;



public class SumServerUDP {

public static void main(String[] args) throws Exception {

DatagramSocket serverSocket = new DatagramSocket(1200);

byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
ByteArrayOutputStream byteSend = new ByteArrayOutputStream();

while(true){
DataOutputStream send = new DataOutputStream(byteSend);
ByteArrayInputStream byteReceive;
int a = 0, b = 0, total = 0;
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
byteReceive = new ByteArrayInputStream(receivePacket.getData());
DataInputStream receive = new DataInputStream(byteReceive);
a = receive.readInt();
b = receive.readInt();
total = a + b;
InetAddress IPAddress = receivePacket.getAddress();
int port = receivePacket.getPort();
send.writeInt(total);
sendData = byteSend.toByteArray();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
serverSocket.send(sendPacket);
byteSend.reset();
send.close();
receive.close();
}
}
}
 

Discussioni simili