Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28

    Passare array ad un socket TCP java

    Salve,

    sto realizzando un'applicazione client/server con protocollo TCP che effettua il prodotto scalare in remoto tra due vettori di elementi di tipo double. Il client deve leggere da tastiera gli elementi dei vettori ed inviare un messaggio con i vettori letti al server. Una volta inseriti gli elementi dei vettori da tastiera non so quale metodo usare per inviare i vettori stessi al server (ho creato due oggetti DataOutputStream ).
    Qualcuno puo aiutarmi?

  2. #2

    Re: Passare array ad un socket TCP java

    Originariamente inviato da isal
    Una volta inseriti gli elementi dei vettori da tastiera non so quale metodo usare per inviare i vettori stessi al server (ho creato due oggetti DataOutputStream ).
    Qualcuno puo aiutarmi?
    In questo caso verranno inviate semplici stringhe.
    Potresti pensare di concatenare tutti i valori numerici in una sola stringa, dovendo definire quindi due delimitatori: uno per delimitare i vettori, l'altro per delimitare i valori.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28
    Ciao, grazie per la risposta. Potresti spiegarti meglio? Scusami ma non sono molto pratico..

  4. #4
    Originariamente inviato da isal
    Ciao, grazie per la risposta. Potresti spiegarti meglio? Scusami ma non sono molto pratico..
    Ad esempio, definisci il '-' come delimitatore dei vettori e il ';' per delimitare i valori nei vettori.

    Quindi, un esempio di stringa che il client costruisce può essere:
    codice:
    "0.5;3;1.5-0.3;1.4;3.1"
    Il server, invece, utilizzerà i delimitatori per "parserizzare" i dati, cioè ottenere i due vettori con i relativi valori.

    Se questa soluzione non ti piace, ne trovi sicuramente una alternativa nella definizione di un tuo protocollo. Cioè definisci messaggi chiave che accompagnano i dati che il client invia al server e/o viceversa.
    Ad esempio, definisci due messaggi tipo ValueFV X (valore primo vettore) e ValueSV X (valore secondo vettore), che rispettivamente indicano l'invio del valore X per il relativo vettore.

  5. #5

    Passare array ad un socket TCP java

    Potresti anche provare ad utilizzare un oggetto serializable e dentro ci metti l'array.

    Ovviamente poi passi l'oggetto serializzato.

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    28

    Passare array ad un socket TCP

    Salve,
    ho provato a risolvere inviando un elemento dell'array per volta...il programma però non funziona...credo che ci siano problemi nello scambio di dati tra client e server e viceversa, ma non riesco a capire come risolvere.Qualcuno può aiutarmi a capire dove sbaglio ?

    Client :

    codice:
    import java.io.*;
    import java.net.*;
    
    class Client{
    	public static void main(String argv[]) throws Exception {
    		double prodScal;
    		String numElem;
    		
    		BufferedReader inFromUser1 = new BufferedReader(new InputStreamReader((System.in)));
    		BufferedReader inElem = new BufferedReader(new InputStreamReader((System.in)));
    		BufferedReader inFromUser2 = new BufferedReader(new InputStreamReader((System.in)));
    		
    		Socket clientSocket = new Socket("localhost", 6789);
    		
    		DataOutputStream outToServer1= new DataOutputStream(clientSocket.getOutputStream());
    		DataOutputStream outToServer2 = new DataOutputStream(clientSocket.getOutputStream());
    		DataOutputStream outToServer3 = new DataOutputStream(clientSocket.getOutputStream());
    		
    		BufferedReader inFromServer = new BufferedReader( new InputStreamReader(clientSocket.getInputStream()));
    		
    		System.out.println("Quanti elementi deve avere ciascuno dei due array?");
    		numElem=inElem.readLine();
    		outToServer1.writeBytes(numElem);
    		
    		//inserire gli elementi dell'array uno da tastiera
    		for(int i=0; i<Integer.parseInt(numElem); i++){
    			System.out.println("Inserire l'elemento n. "+ i+" dell'array 1 (numero elementi= "+numElem +" ):");
    			String elemento=inFromUser1.readLine();
    			outToServer2.writeBytes(elemento);
    		}
    		
    		//inserire gli elementi dell'array 2 da tastiera
    		for(int j=0; j<Integer.parseInt(numElem); j++){
    			System.out.println("Inserire l'elemento n. "+ j+" dell'array 2 :");
    			String elemento2=inFromUser2.readLine();
    			outToServer3.writeBytes(elemento2);
    		}
    		
    		
    		prodScal = Double.parseDouble(inFromServer.readLine());
    		
    		System.out.println("FROM SERVER : Il prodotto vettoriale è " + prodScal);
    		
    		clientSocket.close();
    															}
    				}
    Server:

    codice:
    import java.io.*;
    import java.net.*;
    
    class Server{
    	public static void main(String argv[]) throws Exception {
    		
    		double[] primoArray = null;
    		double[] secondoArray = null;
    		String numElem;
    		double prodScal = 0;
    		
    		ServerSocket welcomeSocket = new ServerSocket(6789);
    		
    			while(true) {
    				
    					Socket connectionSocket = welcomeSocket.accept();
    					
    					System.out.println("server connesso");
    					
    					BufferedReader inFromClient1 = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    					BufferedReader inFromClient3 = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    					BufferedReader inFromClient2 = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
    					
    					DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream());
    					
    					numElem=inFromClient3.readLine();
    					
    					//creo array con elem in arrivo dal client
    					for(int i=0; i<Integer.parseInt(numElem); i++){
    						primoArray[i]=Double.parseDouble(inFromClient1.readLine());
    					} 
    					
    					//creo array con elem in arrivo dal client
    					for(int j=0; j<Integer.parseInt(numElem); j++){
    						secondoArray[j]=Double.parseDouble(inFromClient2.readLine());
    					}
    					
    					
    					//calcolo prodVett
    					for(int i=0; i<primoArray.length; i++){
    							
    						prodScal += primoArray[i]*secondoArray[i];
    					}
    					
    					System.out.println("il prod scal è:"+ prodScal);
    					
    					outToClient.writeDouble(prodScal);
    					
    						}
    															}
    				}

  7. #7
    Lato server ti basta una sola istanza di BufferedReader per leggere i dati ricevuti dal client.
    Lato client non capisco perchè istanzi 3 volte BufferedReader, anche in questo caso ne basta una.

  8. #8

    ObjectStream

    Sulla socket puoi aprire degli ObjectStream(is/os),
    quando ricevi l'array usi questa sintassi

    Object obj = is.readObject();
    if (obj instanceof String[]) {
    ....
    }

    quando invii invece:
    try {
    os.writeObject(tuo Array);
    os.reset();
    } catch (IOException e) {
    (gestisci l'eccezione)
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.