Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Star Wars Zero Company è l'erede di XCOM 2
Star Wars Zero Company è l'erede di XCOM 2
Bit Reactor porta nell’universo di Star Wars una struttura tattica che richiama apertamente XCOM 2, ma la arricchisce con legami tra i personaggi, progressione ruolistica, gestione della base e un sistema di combattimento costruito attorno a tre Punti Azione e alle risorse condivise della squadra
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia)
Abbiamo provato per una settimana intera la Can-Am Origin, la Dual Sport elettrica del gruppo canadese BRP: ecco com'è andata tra città, autostrada e un primo assaggio di sterrato
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco
Nelle ultime settimane abbiamo provato il mouse Logitech G305, la tastiera G316 X 98 e le cuffie G325. Si tratta del setup entry-level di Logitech che ormai, di "entry-level" ha ben poco. Tastiera e mouse offrono prestazioni di livello competitivo con quasi nessuna rinuncia e un livello di personalizzazione estremamente elevato. Le cuffie, invece, hanno mostrato qualche debolezza, ma propongono un ventaglio di funzionalità completo che consente di abbandonare completamente i cavi
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 18-09-2006, 10:27   #1
misantrophia
Member
 
L'Avatar di misantrophia
 
Iscritto dal: Sep 2004
Città: Rimini
Messaggi: 88
[Java] Problema invio file server-client

Spiego la mia situazione:
nel programma in questione il client si connette al server e tra i vari servizi a lui disponibili c'e' quella di inviare file al server e ricevere file dal server.
La comunicazione e' gestita attraverso i socket e per il "normale" dialogo col server utilizzo due oggeti: uno BufferedReader e l'altro PrintWriter.

Quando arriva il momento di trasferire un file (per esempio da server a client) posso utilizzare questi 2 oggetti che ho (il PrintWriter per il server e il BufferedReader per il client)? Perche' guardando sulla doc il PrintWriter non ha un metodo per inviare dei byte.

Ho provato a fare cio' appoggiandomi ad altri 2 oggetti facendo nel seguente modo:

// Server che invia il file
DataOutputStream out = new DataOutputStream(client.getOutputStream());
FileInputStream in = new FileInputStream(clientFile.getAbsolutePath());
byte buffer[] = new byte[1024];
System.out.println( "Invio file in corso..." );
int i;
while((i = in.read(buffer,0,buffer.length)) != -1){
out.write(buffer,0,i);
out.flush();
}
in.close();
System.out.println( "Invio completato." );

//Client che riceve il file
System.out.println("Ricezione file in corso..");
DataInputStream in = new DataInputStream(socket.getInputStream());
FileOutputStream out = new FileOutputStream(lDir + fileName);
byte buffer[] = new byte[1024];
int i;
while ((i = in.read(buffer,0,buffer.length)) != -1){
System.out.println("ci sono");
out.write(buffer,0,i);
}
out.flush();
out.close();
System.out.println( "Ricezione completata!" );


In questo modo pero' mi si verificano 2 casi:
- il server invia il file, il client non entra nel ciclo while e mi ritrovo in locale il file vuoto.
- il server invia il file, il client entra nel ciclo while ma non esce e rimane in attesa infinita, in locale mi ritrovo il file pieno.

Per cercare di evitare il secondo caso, ho provato a chiudere il DataOutputStream sul server, la trasmissione si completa con successo, ma questo mi fa chiudere il socket e quindi la comunicazione col server.

Come risolvere? Il ciclo while impostato in questo modo e' corretto?
Grazie mille a chi risponde!!!
__________________
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perchè. In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè. (Albert Einstein)
misantrophia è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 10:32   #2
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Guarda, ho postato in un altro 3d il metodo di invio di un file da un server ad un client.!.
Non so se ti può essere utile... controlla tu stesso!!!

http://www.hwupgrade.it/forum/showthread.php?t=1281150
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 10:53   #3
misantrophia
Member
 
L'Avatar di misantrophia
 
Iscritto dal: Sep 2004
Città: Rimini
Messaggi: 88
Ma utilizzando DatagramPacket e DatagramSocket, non si effettua una trasmissione UDP?
__________________
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perchè. In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè. (Albert Einstein)
misantrophia è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 11:19   #4
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
Puoi provare con webdav.
Oppure puoi fare un classe che far upload di un file (in rete ne trovi mille) e poi la fai diventare una servlet.
così la richiami e il gioco è fatto
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 14:49   #5
misantrophia
Member
 
L'Avatar di misantrophia
 
Iscritto dal: Sep 2004
Città: Rimini
Messaggi: 88
Quote:
Originariamente inviato da texerasmo
Puoi provare con webdav.
Oppure puoi fare un classe che far upload di un file (in rete ne trovi mille) e poi la fai diventare una servlet.
così la richiami e il gioco è fatto
Sarebbe bello, pero' devo riuscire a farlo io in java.
__________________
La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perchè. In ogni caso si finisce sempre a coniugare la teoria con la pratica: non funziona niente e non si sa il perchè. (Albert Einstein)
misantrophia è offline   Rispondi citando il messaggio o parte di esso
Old 18-09-2006, 18:37   #6
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Quote:
Originariamente inviato da misantrophia
Ma utilizzando DatagramPacket e DatagramSocket, non si effettua una trasmissione UDP?
DatagramPacket e DatagramSocket servono per le connessioni UDP ma se hai un pò di esperienza sulla programmazione impieghi pochissimo per trasformare il listato per connessioni TCP
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2006, 00:18   #7
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Eccoti il codice con la connessione TCP...

SERVER

Codice:
import java.io.*;
import java.net.*;
import java.util.*;

public class Server {
	public static final int PORT = 4444; // porta al difuori del range 1-1024 !
	public static final String FILE = "file.txt";
	ServerSocket socket;
	static BufferedReader in = null;
	static boolean moreLines = true;
	
	public Server(){
		try {
			// creazione della socket 
			socket = new ServerSocket(PORT);
			System.out.println("Socket: " + socket);
		} catch (Exception e) {System.err.println("Unable to create the socket");}
		try {
			// associazione di uno stream
			//	di input al file da cui estrarre le linee 
			in = new BufferedReader(new FileReader(FILE));
			System.out.println("File "+FILE+" opened");
		} catch (FileNotFoundException e)
		{
			System.err.println("Could not open");
		}
	}

	public static void main(String[] args) throws IOException {
		System.out.println("LineServer: started");
		Server server=new Server();
		Socket client = server.socket.accept();
		PrintWriter out = new PrintWriter(new BufferedOutputStream(client.getOutputStream()),true);
	
		while (moreLines) {
			try {
				
				
				// 	preparazione della linea da inviare 
				String dString = null;
				if (in == null) 
					dString = new Date().toString();
				else 
					dString = getNextLine();

				if (dString!=null) {
					//invio linea file
					out.println(dString);
					System.out.println("Sending packet to "+client.getInetAddress()+" port:"+client.getPort());
				}
				else{
					out.println("null");
				}
			} catch (Exception e) {
				e.printStackTrace();
				moreLines = false;
			}
		}
	
		System.out.println("No more lines. Goodbye.");
		System.out.println("LineServer: closing...");
		in.close();
		out.close();
		server.socket.close();
	}

	static String getNextLine() {
		String returnValue = null;
		try {
			if ((returnValue = in.readLine()) == null) {
				in.close();
				moreLines = false;
				returnValue = null;
				//returnValue	= "No more lines. Goodbye.";
			}
		} catch (IOException e) {
			returnValue = "IOException occurred.";
		}
		return returnValue;
	}
}
CLIENT

Codice:
import java.io.*;
import java.net.*;


public class Client {
	
	public static void main(String[] args) throws IOException {
		// 	creazione della socket
		InetAddress serverAddress = InetAddress.getLocalHost();
		int port = 4444;
		
		Socket socket = new Socket(serverAddress, port);
		System.out.println("LineClient: started");
		System.out.println("Socket: "+ socket);
		PrintWriter out = new PrintWriter(new FileWriter("ric.txt"), true);
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		while(true){
			//ricezione linea file.
			String received = in.readLine();
			if(received.trim().equals("null"))
				break;
			else
				out.println(received.trim());
		}
		System.out.println("LineClient: closing...");
		out.close();
		in.close();
		socket.close();
	}
}
é normale che per funzionare bisogna che sia presente il file "file.txt" nella cartella delle classi!
Altrimenti verra catturata l'eccezione FileNotFoundException!

Ciao ciao
__________________
L'unico computer sicuro è un computer spento!!!

Ultima modifica di TempestaT400 : 19-09-2006 alle 19:43.
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2006, 10:19   #8
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
Questo è un esempio di connessione webdav.
Per fare un test di basta prendere tomcat abilitare webdav

import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;

import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpURL;
import org.apache.webdav.lib.WebdavResource;

public class SlideTest {

public static void main (String args[])
{
try
{
HttpURL hrl =
new HttpURL("http://192.168.0.110:8080/webdav/mino");
//user e pass se la gestisci la coas con tomcat-user.xml
hrl.setUserinfo("viru","tomcat");
WebdavResource wdr =
new WebdavResource(hrl);
File fn = new File("SlideTest.class");
//prendo unfile
// wdr.getMethod(fn);
String path = wdr.getPath() + "/" + fn;
//metto un file
boolean rslt = wdr.putMethod(path,fn);
System.out.println("path " + path);
System.out.println("the value of boolean is " + rslt);
//creo una folder in remoto
//boolean status = wdr.mkcolMethod(wdr.getPath() + "/arma");
//System.out.println("MKCOL Status = " + status);
wdr.close();



}
catch(MalformedURLException mue)
{
}
catch(HttpException he)
{
}
catch(IOException ioe)
{
}
}
}



OK funziona TempestaT400 manca una parentesi finale in Server.java,oppure ho sbagliato a fare cp cv
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 19-09-2006, 19:44   #9
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
Si, in effetti ho ricontrollato e mancava una parentesi.!.
Grazie... Cmq,... E' logico che funziona... avevi dubbi'???

PS: ho modificato il codice aggiungendo la parentesi!!!
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2006, 09:39   #10
texerasmo
Senior Member
 
Iscritto dal: Feb 2003
Città: Formia
Messaggi: 1545
ASSOLUTAMNETE NO!!!
ERA PER DARE CONFORTO A MISANTROPHIA
texerasmo è offline   Rispondi citando il messaggio o parte di esso
Old 20-09-2006, 11:11   #11
TempestaT400
Member
 
Iscritto dal: Jan 2006
Messaggi: 92
__________________
L'unico computer sicuro è un computer spento!!!
TempestaT400 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Star Wars Zero Company è l'erede di XCOM 2 Star Wars Zero Company è l'erede di XCOM ...
Test ride Can-Am Origin: la moto elettrica che fa dimenticare il motore a scoppio (ma occhio all'autonomia) Test ride Can-Am Origin: la moto elettrica che f...
Logitech G325, G305 e G316 X: il tris per chi non vuole rinunciare a nulla, spendendo poco Logitech G325, G305 e G316 X: il tris per chi no...
Recensione POCO F9 pro: potenza da vero top di gamma, display da 185 Hz e finalmente una fotocamera da prendere sul serio Recensione POCO F9 pro: potenza da vero top di g...
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
ESA e ClearSpace svilupperanno un satell...
Oracle, stock option da quasi un miliard...
Starship: si è conclusa anticipat...
Un computer quantistico ha funzionato ne...
Sovranità sui dati: AWS è ...
Il nuovo nome della distro Linux mobile ...
Due ventole da 220 mm e non solo: Cooler...
Truffa telefonica via Google Ads: il bro...
Google pensiona le Gems di Gemini: cosa ...
Flight 14: incertezza per un problema a ...
C'è un problema con i robot Tesla: i dip...
Raggi gamma anomali dalla Via Lattea sve...
NIO vende il 30% della divisione scambio...
Sony brevetta un DualSense capace di acc...
Un volto per l'assistenza IA: cosa pu&og...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 20:06.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v