如题。

解决方案 »

  1.   

    把文件转化为Stream(要看具体是什么文件了),用Socket通信就行了啊!
      

  2.   

    呵呵
    我用socket实现了点对点的文本传送
    相信原理差不多
      

  3.   

    由四个类组成,可用来作ftp服务器用的一个实例,算是比较全面的一个文件上传的例子吧
    import java.io.*;
    import java.net.*;public class FTPServer{
    ThreadGroup group;
    FTPServer(){
    group=new ThreadGroup("FTPThreads");
    }
    protected void finalize(){
    group.stop();
    }
    public static void main(String[] args){
    ServerSocket server;
    Socket socket;
    FTPServer ftp=new FTPServer();
    try{
    server=new ServerSocket(1999);
    System.out.println("Listening on port: 1999");
    }catch(IOException e){
    System.out.println("e");
    return;
    }
    while(true){
    try{
    socket=server.accept();
    System.out.println("New user form"+socket.getInetAddress().toString());
    (new FTPServerThread(ftp.group,ftp,socket)).start();
    }catch(IOException e){
    System.out.println(e);
    return;
    }
    }
    }
    }
    __________________________________________
    import java.io.*;
    import java.net.*;class FTPServerThread extends Thread{
    FTPServer ftp;
    Socket socket;
    DataInputStream in;
    PrintStream out;
    String line;
    FileList fl;
    public FTPServerThread(ThreadGroup group,FTPServer ftp,Socket socket){
    super(group,"FTPThread");
    this.ftp=ftp;
    this.socket=socket;
    fl=new FileList("d:/ftp");
    }
    public void run(){
    try{
    in=new DataInputStream(socket.getInputStream());
    out=new PrintStream(socket.getOutputStream());
    while(true){
    line=in.readLine();
    if(line.trim().equals("ls")){
    fl.Display(out);
    }else if(line.trim().equals("quit")){
    break;
    }else if(line.substring(0,2).equals("cd")){
    fl.ChDir(line.substring(2).trim(),out);
    }else if(line.substring(0,3).equals("get")){
    fl.put(line.substring(3).trim(),out);
    }else{
    out.println("Invalid command");
    }
    }
    in.close();
    out.close();
    System.out.println("User "+socket.getInetAddress().toString()+" leaved");
    socket.close();
    }
    catch(IOException e){
    System.out.println(e);
    }
    }
    }
    _________________________________________
    import java.io.*;
    import java.net.*;class FileList{
    File f;
    FileList(String dir){
    f=new File(dir);
    }
    public void ChDir(String dir,PrintStream out){
    if(dir.equals("..")){
    if(f.getParent()!=null){
    f=new File(f.getParent());
    out.println("Current directory: "+f.getPath());
    }
    else{
    out.println("Already root directory!");
    }
    }
    else{
    File g=new File(f,dir);
    if(g.exists()&&g.isDirectory()){
    f=g;
    out.println("Current directory: "+f.getPath());
    }
    else{
    out.println("No such directory!");
    }
    }
    }
    public void Display(PrintStream out){
    String[] st=f.list();
    File g;
    out.println(st.length);
    for(int i=0;i<st.length;i++){
    g=new File(f,st[i]);
    if(g.isFile()){
    out.println(format(st[i],20,false)+format(String.valueOf(g.length()),10,true));
    }
    else{
    out.println(format(st[i],20,false)+format("<DIR>",10,true));
    }
    }
    }
    private String format(String s,int len,boolean pre){
    StringBuffer buf=new StringBuffer(s);
    while(buf.length()<len){
    if(pre){
    buf.insert(0," ");
    }else{
    buf.append(" ");
    }
    }
    return(new String(buf));
    }
    public void put(String fn,PrintStream out){
    File g=new File(f,fn);
    if(g.exists()&&g.isFile()){
    try{
    FileInputStream fin=new FileInputStream(g);
    int len=(int)g.length();
    byte[] content=new byte[len];
    out.println(len);
    fin.read(content,0,len);
    fin.close();
    out.write(content,0,len);
    }
    catch(IOException e){}
    }
    else{
    out.print(-1);
    out.println("No such file!");
    }
    }
    }
    _________________________________________
    import java.io.*;
    import java.net.*;public class FTPClient{
    public static void main(String[] args){
    Socket socket;
    DataInputStream in;
    PrintStream out;
    String line;
    DataInputStream din=new DataInputStream(System.in);
    //if(args.length!=1){
    // System.out.println("Usage: java FTPClient <hostname>");
    // return;
    //}
    try{
    socket=new Socket("192.168.28.82",1999);
    in=new DataInputStream(socket.getInputStream());
    out=new PrintStream(socket.getOutputStream());
    while(true){
    System.out.println();
    System.out.print(":");
    line=din.readLine();
    if(line.equals(" "))continue;
    out.println(line);
    if(line.trim().equals("quit"))break;
    else if(line.trim().equals("ls")){
    int num=Integer.parseInt(in.readLine());
    for(int i=0;i<num;i++){
    line=in.readLine();
    System.out.println(line);
    }
    System.out.println("Total: "+num+" Items");
    }else if(line.trim().substring(0,3).equals("get")){
    int len=Integer.parseInt(in.readLine());
    if(len<0){
    line=in.readLine();
    System.out.println(line);
    }
    else{
    FileOutputStream fout=new FileOutputStream("d:/down/"+line.substring(3).trim());
    byte[] content=new byte[len];
    in.read(content,0,len);
    fout.write(content,0,len);
    fout.close();
    System.out.println(len+" bytes received");
    }
    }
    else{
    line=in.readLine();
    System.out.println(line);
    }
    }
    in.close();
    out.close();
    socket.close();
    }
    catch(IOException e){
    System.out.println(e);
    }
    }
    }
      

  4.   

    点对点的文本传送是必修课,原理和socket上写东西一样.
    我用的是
        private PrintStream m_Out=null;    
        private BufferedInputStream m_In=null;
      

  5.   

    多谢 Hodex(小何才露尖尖角),东西我还没看完,不过谢一下先!
      

  6.   

    to  Hodex(小何才露尖尖角) ,终于看了一遍你的代码,先谢谢你!不过有个问题想问一下,为什么get到的文件在目的文件夹找不到?
      

  7.   

    不是FileOutputStream fout=new FileOutputStream("d:/down/"+line.substring(3).trim());吗,
    你到d:/down下找不到?
      

  8.   

    帮你放到当前目录中去了?
    我的怎么都在d:/down
    不过关键是你了解了
    呵呵