Newsgroup: it.comp.java
Titolo: Trasferire file con socket TCP

Salve,
devo creare un programma che invii un file tramite socket TCP...
Come posso fare?

 writes:
Elbrethril> Salve, devo creare un programma che invii un file tramite
Elbrethril> socket TCP...  Come posso fare?
1) ti inventi qualcosa
2) implementi ftp :)
-- 
 /\           ___
/___/\_|_|\_|__|___Gian Uberto Lauri_____
  //--\| | \|  |   Integralista GNUslamico
\/                 e coltivatore diretto di Software

 Come posso fare?
Dalla parte di chi invia il file: apri la socket, apri il file, leggi dal file e scrivi sulla socket, chiudi tutto
Da chi riceve invece: attendi l'apertura della socket, apri il file in cui vuoi memorizzare, leggi dalla socket e scrivi su un file, chiudi tutto
Saluti
CarMas

Elbrethril wrote:

Java ha delle classi belle e pronte con pure degli esempi sul tutorial della
Sun, se usi google poi..


Anni or sono trovai questa semplice soluzione che spero possa aiutarti:
P.s. Se ci sono metodi deprecati aggiusta tu.
Ciao.
Alex.
--------------------------------------------------------
SERVER
-------------------------------------------------------
import java.net.*;
import java.io.*;
public class Server{
   public static void main (String args[]){
   int ii;
   int ccc;
   FileWriter out=null;
    try{
        ServerSocket srv=new ServerSocket(9876);
        System.out.println("FTP Java Server v1.0");
        Socket s=srv.accept();
        System.out.println("Connect to: "+s);
        File path = new File(".");
        String[] lista = path.list();
/*
	 for (ii=0;ii<lista.length;ii++)
	 {
	 System.out.println(lista[ii]);
	 }
*/
        DataOutputStream o= new DataOutputStream (s.getOutputStream());
        DataInputStream i=new DataInputStream(s.getInputStream());
        o.writeUTF("Hello, FTP Java Server. Ready!");
        o.writeUTF("-");
        String mtr, nfile="";
	char m;
      while(true)
      {
      	String etr=i.readUTF();
	System.out.println("Client send command: "+etr);
       // inizia riconoscimento 'dir' command
       if (((ccc=((char)etr.charAt(0))) == 100) &&
	 ((ccc=((char)etr.charAt(1))) == 105) &&
	 ((ccc=((char)etr.charAt(2))) == 114))
       {
 
	 for (ii=0;ii<lista.length;ii++)
	 {
	 o.writeUTF(lista[ii]);
	 }
	 o.writeUTF("-");
	 // fine 'dir'
	 // inizia riconoscimento 'send' command
       } else if (((ccc=((char)etr.charAt(0))) == 115) &&
	    ((ccc=((char)etr.charAt(1))) == 101) &&
	    ((ccc=((char)etr.charAt(2))) == 110) &&
	    ((ccc=((char)etr.charAt(3))) == 100))
	{
	    for(int yy=5;yy<etr.length();yy++)
	    {
	      nfile=nfile+etr.charAt(yy);
	    }
	    //togliere se funziona il write
	    nfile=nfile+"_new.txt";
	    //
	    File outputFile = new File(nfile);
	    out = new FileWriter(outputFile);
 
	    do
	    {
	     try{
	      mtr=i.readUTF();
	     }catch(EOFException eofE){
	     	mtr="\u0000";
	     }
	      System.out.print("-"+mtr+"-");
	      out.write(mtr);
	    } while (!mtr.equals("\u0000"));
 
 
	    System.out.print("finito");
	    out.close();
 
	    o.writeUTF("-");
	    // fine 'send'
	}
      }
    }catch(Exception ex)
     {
       if(ex instanceof EOFException){}
       else {
       System.out.println("Connection closed by Client.");
       ex.printStackTrace();}
     }
   }
}
------------------------------------
CLIENT
---------------------------------------
import java.net.*;
import java.io.*;
import java.util.*;
public class Client
{
   public static void main (String args[])
   {
    String str, ttt, stringa, nfile="";
    FileReader in;
    int ccc, cc;
    try
     {
        Socket s=new Socket("localhost",9876);
        System.out.println("Connected to Java Server");
        DataOutputStream o=new DataOutputStream (s.getOutputStream());
        DataInputStream i = new DataInputStream(s.getInputStream());
        do
	  {
	    str=i.readUTF();
	    System.out.println(str);
	  } while (!str.equals("-"));
        System.out.print(">");
        stringa=readLine();
        //stringa=SavitchIn.readLine();
        o.writeUTF(stringa);
        if (((ccc=((char)stringa.charAt(0))) == 100) &&
	 ((ccc=((char)stringa.charAt(1))) == 105) &&
	 ((ccc=((char)stringa.charAt(2))) == 114))
        {
	  do
	  {
	    str=i.readUTF();
	    System.out.println(str);
	  } while (!str.equals("-"));
        } else if (((ccc=((char)stringa.charAt(0))) == 115) &&
	    ((ccc=((char)stringa.charAt(1))) == 101) &&
	    ((ccc=((char)stringa.charAt(2))) == 110) &&
	    ((ccc=((char)stringa.charAt(3))) == 100))
	 {
	    for(int yy=5;yy<stringa.length();yy++)
	    {
		nfile=nfile+stringa.charAt(yy);
	    }
 
	    File inputFile = new File(nfile);
	    in = new FileReader(inputFile);
	    while ((cc = in.read()) != -1)
	    {
	       ttt=String.valueOf((char)cc);
	       o.writeUTF(ttt);
	       //o.writeChar((char)cc);
	       System.out.print(ttt);
	    }
	    //o.writeUTF(-1);
	    o.flush();
	    in.close();
	 }
	 //o.close();
	 i.close();
	 //s.close();
	 while (true){}
 
	 //System.out.println("Connection closed.");
     }catch(Exception ex)
      {
	 System.out.println("Connection closed by Server.");
	 //ex.printStackTrace();
      }
   }
   public static String readLine()
   {
	char nextChar;
	String result = "";
	boolean done = false;
	while (!done)
	{
	    nextChar = readChar();
	    if (nextChar == '\n')
	       done = true;
	    else if (nextChar == '\r')
	    {
		//Do nothing.
		//Next loop iteration will detect '\n'
	    }
	    else
	       result = result + nextChar;
	}
	return result;
   }
   public static char readChar()
     {
	int charAsInt = -1; //To keep the compiler happy
	try
	{
	    charAsInt = System.in.read();
	}
	catch(IOException e)
	{
	    System.out.println(e.getMessage());
	    System.out.println("Fatal error. Ending Program.");
	    System.exit(0);
	}
	return (char)charAsInt;
     }
}