HTML.it è il sito italiano del web publishing

Passare array ad un socket TCP java



scegli un altro forum
    Indietro   Ricarica   Avanti Invia una risposta

Autore
Discussione     
isal
Utente di HTML.it



Registrato il: Sep 2007

Provenienza:

Messaggi: 28


ICQ:

MSN:

Skype:


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?

Segnala ad un moderatore | IP: Collegato | Permalink

isal è offline Old Post 10-04-2012 18:18
Clicca qui per vedere il profilo dell'utente isal Clicca qui per inviare all'utente isal un messaggio privato Visualizza ulteriori messaggi scritti dall'utente isal Aggiungi l'utente isal alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
VincenzoTheBest
Utente di HTML.it



Registrato il: Jan 2007

Provenienza:

Messaggi: 1275


ICQ :

MSN :

Skype :


Re: Passare array ad un socket TCP java
Citazione:
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.

Segnala ad un moderatore | IP: Collegato | Permalink

VincenzoTheBest è offline Old Post 10-04-2012 18:50
Clicca qui per vedere il profilo dell'utente VincenzoTheBest Clicca qui per inviare all'utente VincenzoTheBest un messaggio privato Visualizza ulteriori messaggi scritti dall'utente VincenzoTheBest Aggiungi l'utente VincenzoTheBest alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
isal
Utente di HTML.it



Registrato il: Sep 2007

Provenienza:

Messaggi: 28


ICQ :

MSN :

Skype :


Ciao, grazie per la risposta. Potresti spiegarti meglio? Scusami ma non sono molto pratico..

Segnala ad un moderatore | IP: Collegato | Permalink

isal è offline Old Post 10-04-2012 19:03
Clicca qui per vedere il profilo dell'utente isal Clicca qui per inviare all'utente isal un messaggio privato Visualizza ulteriori messaggi scritti dall'utente isal Aggiungi l'utente isal alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
VincenzoTheBest
Utente di HTML.it



Registrato il: Jan 2007

Provenienza:

Messaggi: 1275


ICQ :

MSN :

Skype :


Citazione:
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.

Segnala ad un moderatore | IP: Collegato | Permalink

VincenzoTheBest è offline Old Post 11-04-2012 01:17
Clicca qui per vedere il profilo dell'utente VincenzoTheBest Clicca qui per inviare all'utente VincenzoTheBest un messaggio privato Visualizza ulteriori messaggi scritti dall'utente VincenzoTheBest Aggiungi l'utente VincenzoTheBest alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
Devil01
Utente di HTML.it



Registrato il: May 2005

Provenienza:

Messaggi: 88


ICQ :

MSN :

Skype :


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.

Segnala ad un moderatore | IP: Collegato | Permalink

Devil01 è offline Old Post 11-04-2012 16:15
Clicca qui per vedere il profilo dell'utente Devil01 Clicca qui per inviare all'utente Devil01 un messaggio privato Visualizza ulteriori messaggi scritti dall'utente Devil01 Aggiungi l'utente Devil01 alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
isal
Utente di HTML.it



Registrato il: Sep 2007

Provenienza:

Messaggi: 28


ICQ :

MSN :

Skype :


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);
					
						}
															}
				}

Segnala ad un moderatore | IP: Collegato | Permalink

isal è offline Old Post 14-04-2012 22:26
Clicca qui per vedere il profilo dell'utente isal Clicca qui per inviare all'utente isal un messaggio privato Visualizza ulteriori messaggi scritti dall'utente isal Aggiungi l'utente isal alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
VincenzoTheBest
Utente di HTML.it



Registrato il: Jan 2007

Provenienza:

Messaggi: 1275


ICQ :

MSN :

Skype :


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.

Segnala ad un moderatore | IP: Collegato | Permalink

VincenzoTheBest è offline Old Post 15-04-2012 12:14
Clicca qui per vedere il profilo dell'utente VincenzoTheBest Clicca qui per inviare all'utente VincenzoTheBest un messaggio privato Visualizza ulteriori messaggi scritti dall'utente VincenzoTheBest Aggiungi l'utente VincenzoTheBest alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
LexTheKing
Utente di HTML.it



Registrato il: Feb 2012

Provenienza:

Messaggi: 6


ICQ :

MSN :

Skype :


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)
}

Segnala ad un moderatore | IP: Collegato | Permalink

LexTheKing è offline Old Post 16-04-2012 15:38
Clicca qui per vedere il profilo dell'utente LexTheKing Clicca qui per inviare all'utente LexTheKing un messaggio privato Visualizza ulteriori messaggi scritti dall'utente LexTheKing Aggiungi l'utente LexTheKing alla tua lista degli utenti amici Modifica / Cancella il messaggio Rispondi quotando   Torna su
Tutte le ore sono con fuso orario CET. Ora sono le 04:33.     

    Ultima discussione   Prossima discussione Invia una risposta
Versione per la stampa | Invia il thread via email | Ricevi aggiornamenti sul thread | Scarica il thread
 

Cerchi un argomento specifico e hai fretta? Usa il motore di ricerca