⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sftp.java

📁 有关java 的p2p应用,是一般很好的教程,有兴趣的朋友应该好好阅读一下
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        // K bytes per second calcul        long elapsedTime = System.currentTimeMillis() - stime;        // protect agains div by 0        if (elapsedTime == 0)            elapsedTime = 1;        long kbpsec = (long)(((long)fileSize)/elapsedTime);        float secs = (float)(((float)elapsedTime)/1000.0);        println("\nSent: " + fileSize + " bytes in "  + secs + " secs[" +                kbpsec + "Kbytes/sec]");        try {            fs.close();        } catch (Exception ex) {            printStackTrace( "Close failed for " + fileName, ex );        }        pipeOut.close();        return ShellApp.appNoError;    }    private int registerNewUser(String[] args) {        boolean secure = true;        if( (args.length == 3) && ("-insecure".equals(args[2])) )            secure = false;        else            if ((args.length != 2)) {                return syntaxError();            }        String name = args[1];        // Always secure        String type = null;        if( secure )            type = PipeService.UnicastSecureType;        else            type = PipeService.UnicastType;        // Check if there is already a registered user of the        // same name.        PipeAdvertisement adv = findUserAdv(name);        if (adv != null) {            consoleMessage("Sorry, user " + name + " is already registered");            return ShellApp.appMiscError;        }        try {            // Create a pipe advertisement for this pipe.            adv = (PipeAdvertisement)                  AdvertisementFactory.newAdvertisement(PipeAdvertisement.getAdvertisementType());        } catch( Exception all ) {            printStackTrace( "Advertisement document could not be created", all );            return ShellApp.appMiscError;        }        ShellObject obj = env.get("stdgroup");        // extract the advertisement        PeerGroup group = (PeerGroup) obj.getObject();        adv.setPipeID( IDFactory.newPipeID( (PeerGroupID) group.getPeerGroupID() ) );        adv.setName(SftpNameTag + "." + name);        adv.setType (type);        try {            // Save the document into the public folder            discovery.publish(adv);            discovery.remotePublish(adv);        } catch (Exception e2) {            printStackTrace( "Advertisement could not be saved", e2 );            return ShellApp.appMiscError;        }        println("User : " + name + " is now registered");        return ShellApp.appNoError;    }    // Make sure "name" is the advertised name    private boolean checkUserAdv(PipeAdvertisement adv, String name) {        if (adv == null)            return false;        if (adv.getName() == null)            return false;        String str = adv.getName();        if (str.startsWith(SftpNameTag) &&  str.endsWith(name)) {            return true;        }        return false;    }    private PipeAdvertisement findUserAdv(String name) {        Enumeration each = null;        // First look in the local storage        try {            each = discovery.getLocalAdvertisements(DiscoveryService.ADV,                                                    PipeAdvertisement.NameTag,                                                    SftpNameTag+".*");            if ((each != null) && (each.hasMoreElements())) {                PipeAdvertisement adv = null;                while (each.hasMoreElements()) {                    try {                        adv = (PipeAdvertisement) each.nextElement();                        if (adv.getName().endsWith(name)) {                            if (checkUserAdv(adv, name)) {                                return adv;                            }                        }                    } catch(Exception e) {                        continue;                    }                    if (checkUserAdv(adv, name)) {                        return adv;                    }                }            }        } catch (Exception e) {            printStackTrace( "Exception locating advertisement", e );        }        // Now, search remote        discovery.getRemoteAdvertisements(null, DiscoveryService.ADV,                                          PipeAdvertisement.NameTag,                                          SftpNameTag + "." + name,                                          2, null);        // Wait a bit in order to get an answer.        int i = 0;        while (true) {            try {                if (i>MAXRETRIES) {                    println("");                    break;                }                Thread.sleep(WaitingTime);                print(".");                i++;            } catch (Exception e) {                printStackTrace( "Exception locating advertisement", e);            }            // Look in the local storage again            try {                each = discovery.getLocalAdvertisements(DiscoveryService.ADV,                                                        PipeAdvertisement.NameTag,                                                        SftpNameTag + "." + name);                if ((each != null) && (each.hasMoreElements())) {                    PipeAdvertisement adv = null;                    while (each.hasMoreElements()) {                        try {                            adv = (PipeAdvertisement) each.nextElement();                        } catch(Exception e) {                            continue;                        }                        if (checkUserAdv(adv, name)) {                            return adv;                        }                    }                }            } catch (Exception e) {                printStackTrace( "Exception locating advertisement", e );            }        }        // adv not found        return null;    }    private void runDaemon(String name, PipeAdvertisement adv) {        userAdv = adv;        userName = name;        thread = new Thread(this, "Jftpd:Jftpd Deamon" );        thread.start();        // Store this object        ShellObject obj = env.add(EnvName + "." + name + "@" +                                  (getGroup().getPeerGroupAdvertisement()).getName(),                                  new ShellObject("Sftpd Deamon for " + name + "@" +                                                  (getGroup().getPeerGroupAdvertisement()).getName(),                                                  this));    }    private void stopDaemon(String name) {        String dname = EnvName + "." + name + "@" +                       (getGroup().getPeerGroupAdvertisement()).getName();        ShellObject obj = env.get(dname);        if (obj == null) {            consoleMessage( "Daemon(" + dname + ") for " + name + " not found");            return;        }        sftp d = null;        try {            d = (sftp) obj.getObject();            d.thread.interrupt();            env.remove(dname);        } catch (Exception e) {            printStackTrace( "cannot stop daemon for " + name, e );        }    }    public void run() {        try {            InputPipe pipeIn = null;            try {                pipeIn = getGroup().getPipeService().createInputPipe(userAdv);            } catch (Exception e) {                return ;            }            if (pipeIn == null) {                consoleMessage( "cannot open InputPipe");                return;            }            // Listen on the pipe            Message msg = null;            // Message counter            int i = 0;            // Receive a file            File f = null;            FileOutputStream fout = null;            String fileName = null;            int fsize = 0;            int offset = 0;            long stime = 0;            while (true) {                try {                    msg = pipeIn.waitForMessage();                    if (msg == null) {                        if (Thread.interrupted()) {                            // We have been asked to stop                            consoleMessage( "stop listening for user " + userName);                            pipeIn.close();                            return;                        }                        println("NULL msg");                        continue;                    }                } catch (Exception e) {                    // This exception probaly happened because the                    // deamon has been interrupted. In any case, that                    // shows that sftpd cannot receive messages anyway.                    // clean up.                    pipeIn.close();                    return;                }                // Get the first tag                InputStream ip = null;                String senderName = "Anonymous";                // Get the file information                //   i == 0 on start or restart                if (i++ == 0) {                    fout = null;  // used as a flag                    String fileInfo = (msg.getMessageElement(FileInfo)).toString();                    if (fileInfo == null) {                        // Something is broken                        pipeIn.close();                        consoleMessage( "bad message received. Stopping daemon for user :" +                                        userName);                        env.remove(EnvName + "." + userName + "@" +                                   (getGroup().getPeerGroupAdvertisement()).getName());                        return;                    }                    // open the file for output.                    //   fileInfo == "filename\nfilesize"                    int j = fileInfo.indexOf("\n");                    fileName = fileInfo.substring(0, j);                    String ofile = fdir + fileName;                    try {                        f = new File(ofile);                        if (f.exists()) {                            f.delete();                        }                        if (f.createNewFile()) {                            fout = new FileOutputStream(f);                        }                    } catch (Exception e) {                        printStackTrace( "Could not create output file " + ofile, e );                        consoleMessage("Will receive but not write the data");                        fout = null;                    }                    // file size                    String filesize = fileInfo.substring(j+1);                    Integer isize = new Integer(filesize);                    fsize = isize.intValue();                    // start at BOF                    offset = 0;                    stime = System.currentTimeMillis();                }                // Get sender information                senderName = (msg.getMessageElement(SenderName)).toString();                if (i == 1) {                    println("\nReceive " + fileName + "[" + fsize + " bytes] from " +                            senderName);                }                // write data to file                byte[] data = (msg.getMessageElement(JftpData)).getBytes(false);                if (data == null) {                    println("sftpd: user " + senderName + " sent empty data");                    continue;                }                if (fout != null) {                    fout.write(data, 0, data.length);                }                // See if the file transfer is done                offset += data.length;                if (offset == fsize) {                    println("! Done");                    i = 0;                    if (fout != null)                        fout.close();                    // elapsed time and bytes per sec.                    long elapsedTime = System.currentTimeMillis() - stime;                    // div by 0 check                    if (elapsedTime == 0)                        elapsedTime = 1;                    long kbpsec = (long)(((long)fsize)/elapsedTime);                    float secs = (float)(((float)elapsedTime)/1000.0);                    println("Received: " + fsize + " bytes in "  + secs + " secs[" +                            kbpsec + "Kbytes/sec]");                } else {                    print("!");                }            }        } catch( Throwable all ) {            printStackTrace( "Uncaught Throwable in thread :" + Thread.currentThread().getName(), all );        }    }    public String getDescription() {        return "Send a file to another peer";    }    public void help() {        println("NAME");        println("    sftp - send a file to another peer ");        println(" ");        println("SYNOPSIS");        println(" ");        println("    sftp -register <userName>");        println("    sftp -login <userName>");        println("    sftp -logout <userName>");        println("    sftp -s <user> <userName> <fileName>");        println(" ");        println("DESCRIPTION");        println(" ");        println("The 'sftp command implements a secure file transfer");        println("where one peer can send a file to a second.");        println("to use 'sftp'. The user needs to register himself. This is done");        println("via the following steps:");        println("Step 1: Register via 'sftp -register <username>' command. This command");        println("        creates a secure sftp advertisement for that user. This has to");        println("        be done only once, the first time the user registers with");        println("        sftp. The system remembers it across reboot.");        println(" ");        println("Step 2: Login  via 'sftp -login <username>' command. This command");        println("        login the user and start a listener daemon. This has to");        println("        to be done everytime the peer is restarted.");        println(" ");        println("Step 3: User can securely send a file to another user via the command");        println("        'sftp -s <myusername> <destusername> <filename>'. This will send the");        println("        file <filename> to the dest. The file is written on the sftp");        println("        subdirectory of the directory where the shell is started.");        println(" ");        println("         JXTA>sftp -s moi mike photo.gif");        println("         sftp is connected to user mike");        println("         Sending file photo.gif, size = 55692 bytes");        println("  ");        println("To stop receiving any more files the user can stop the sftp");        println("listener daemon by entering the command 'sftp -logout <username>'");        println(" ");        println("OPTIONS");        println(" ");        println("    -register register a new user name  ");        println("    -login    log user and set default user");        println("    -logout   logout");        println("    -s        specify current user, and file names");        println(" ");        println("EXAMPLE");        println(" ");        println("      JXTA>sftp -register me");        println("      JXTA>sftp -login me");        println("      JXTA>sftp -s me you /tmp/nihow.jpg");        println(" ");        println("This example shows how a new user 'me'  can register and log into sftp,");        println("and send a file to the user 'you'. User 'you' needs to be similarly");        println("registered and logged on. The above file is written as sftp/nihow.jpg");        println(" ");        println("SEE ALSO");    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -