当前位置:首页 > 代码 > 正文

ftpserver代码(ftp java代码)

admin 发布:2022-12-19 05:14 131


本篇文章给大家谈谈ftpserver代码,以及ftp java代码对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

求FTP Server和FTP Client的源代码,要java或C++的,

客户端

/* Client side of an ftp service. Actions:

- connect to server and request service

- send size-of-sile info to server

- start receiving file from server

- close connection

*/

#include stdio.h

#include sys/types.h

#include sys/socket.h

#include netinet/in.h

#include arpa/inet.h

#include time.h

#include errno.h

#define SERVER_PORT_ID 6081

#define CLIENT_PORT_ID 6086

#define SERVER_HOST_ADDR "128.119.40.186"

/* gaia.cs.umass.edu */

#define MAXSIZE 512

#define ACK 2

#define NACK 3

#define REQUESTFILE 100

#define COMMANDNOTSUPPORTED 150

#define COMMANDSUPPORTED 160

#define BADFILENAME 200

#define FILENAMEOK 400

#define STARTTRANSFER 500

int readn(int sd,char *ptr,int size);

int writen(int sd,char *ptr,int size);

main(int argc,char *argv[])

{

int sockid, newsockid,i,getfile,ack,msg,msg_2,c,len;

int no_writen,start_xfer, num_blks,num_last_blk;

struct sockaddr_in my_addr, server_addr;

FILE *fp;

char in_buf[MAXSIZE];

if(argc != 2) {printf("error: usage : sftp filename\n"); exit(0);}

no_writen = 0;

num_blks = 0;

num_last_blk = 0;

len = strlen(argv[1]);

printf("client: creating socket\n");

if ((sockid = socket(AF_INET,SOCK_STREAM,0)) 0)

{ printf("client: socket error : %d\n", errno); exit(0);

}

printf("client: binding my local socket\n");

bzero((char *) my_addr,sizeof(my_addr));

my_addr.sin_family = AF_INET;

my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

my_addr.sin_port = htons(CLIENT_PORT_ID);

if (bind(sockid ,(struct sockaddr *) my_addr,sizeof(my_addr)) 0)

{printf("client: bind error :%d\n", errno); exit(0);

}

printf("client: starting connect\n");

bzero((char *) server_addr,sizeof(server_addr));

server_addr.sin_family = AF_INET;

server_addr.sin_addr.s_addr = inet_addr(SERVER_HOST_ADDR);

server_addr.sin_port = htons(SERVER_PORT_ID);

if (connect(sockid ,(struct sockaddr *) server_addr,

sizeof(server_addr)) 0)

{printf("client: connect error :%d\n", errno); exit(0);

}

/* Once we are here, we've got a connection to the server */

/* tell server that we want to get a file */

getfile = htons(REQUESTFILE);

printf("client: sending command request to ftp server\n");

if((writen(sockid,(char *)getfile,sizeof(getfile))) 0)

{printf("client: write error :%d\n", errno); exit(0);}

/* want for go-ahead from server */

msg = 0;

if((readn(sockid,(char *)msg,sizeof(msg))) 0)

{printf("client: read error :%d\n", errno); exit(0); }

msg = ntohs(msg);

if (msg==COMMANDNOTSUPPORTED) {

printf("client: server refused command. goodbye\n");

exit(0);

}

else

printf("client: server replied %d, command supported\n",msg);

/* send file name to server */

printf("client: sending filename\n");

if ((writen(sockid,argv[1],len)) 0)

{printf("client: write error :%d\n", errno); exit(0);}

/* see if server replied that file name is OK */

msg_2 = 0;

if ((readn(sockid,(char *)msg_2,sizeof(msg_2))) 0)

{printf("client: read error :%d\n", errno); exit(0); }

msg_2 = ntohs(msg_2);

if (msg_2 == BADFILENAME) {

printf("client: server reported bad file name. goodbye.\n");

exit(0);

}

else

printf("client: server replied %d, filename OK\n",msg_2);

/* CLIENT KNOWS SERVER HAS BEEN ABLE TO OPEN THE FILE IN READ

MODE AND IS ASKING FOR GO-AHEAD*/

/* CLIENT NOW OPENS A COPY OF THE FILE IN WRITE MODE AND SENDS

THE GOAHEAD TO SERVER*/

printf("client: sending start transfer command\n");

start_xfer = STARTTRANSFER;

start_xfer = htons(start_xfer);

if ((writen(sockid,(char *)start_xfer,sizeof(start_xfer))) 0)

{printf("client: write error :%d\n", errno); exit(0);

}

if ((fp = fopen(argv[1],"w")) == NULL)

{printf(" client: local open file error \n");exit(0);}

/*NOW THE CLIENT IS READING INFORMATION FROM THE SERVER REGARDING HOW MANY

FULL BLOCKS OF SIZE MAXSIZE IT CAN EXPECT. IT ALSO RECEIVES THE NUMBER

OF BYTES REMAINING IN THE LAST PARTIALLY FILLED BLOCK, IF ANY */

if((readn(sockid,(char *)num_blks,sizeof(num_blks))) 0)

{printf("client: read error on nblocks :%d\n",errno);exit(0);}

num_blks = ntohs(num_blks);

printf("client: server responded: %d blocks in file\n",num_blks);

ack = ACK;

ack = htons(ack);

if((writen(sockid,(char *)ack,sizeof(ack))) 0)

{printf("client: ack write error :%d\n",errno);exit(0);

}

if((readn(sockid,(char *)num_last_blk,sizeof(num_last_blk))) 0)

{printf("client: read error :%d on nbytes\n",errno);exit(0);}

num_last_blk = ntohs(num_last_blk);

printf("client: server responded: %d bytes last blk\n",num_last_blk);

if((writen(sockid,(char *)ack,sizeof(ack))) 0)

{printf("client: ack write error :%d\n",errno);exit(0);

}

/* BEGIN READING BLOCKS BEING SENT BY SERVER */

printf("client: starting to get file contents\n");

for(i= 0; i num_blks; i ++) {

if((readn(sockid,in_buf,MAXSIZE)) 0)

{printf("client: block error read: %d\n",errno);exit(0);}

no_writen = fwrite(in_buf,sizeof(char),MAXSIZE,fp);

if (no_writen == 0) {printf("client: file write error\n");exit(0);}

if (no_writen != MAXSIZE)

{printf("client: file write error : no_writen is less\n");exit(0);}

/* send an ACK for this block */

if((writen(sockid,(char *)ack,sizeof(ack))) 0)

{printf("client: ack write error :%d\n",errno);exit(0);}

printf(" %d...",i);

}

/*IF THERE IS A LAST PARTIALLY FILLED BLOCK, READ IT */

if (num_last_blk 0) {

printf("%d\n",num_blks);

if((readn(sockid,in_buf,num_last_blk)) 0)

{printf("client: last block error read :%d\n",errno);exit(0);}

no_writen = fwrite(in_buf,sizeof(char),num_last_blk,fp);

if (no_writen == 0)

{printf("client: last block file write err :%d\n",errno);exit(0);}

if (no_writen != num_last_blk)

{printf("client: file write error : no_writen is less 2\n");exit(0);}

if((writen(sockid,(char *)ack,sizeof(ack))) 0)

{printf("client :ack write error :%d\n",errno);exit(0);}

}

else printf("\n");

/*FILE TRANSFER ENDS. CLIENT TERMINATES AFTER CLOSING ALL ITS FILES

AND SOCKETS*/

fclose(fp);

printf("client: FILE TRANSFER COMPLETE\n");

close(sockid);

}

/* DUE TO THE FACT THAT BUFFER LIMITS IN KERNEL FOR THE SOCKET MAY BE

REACHED, IT IS POSSIBLE THAT READ AND WRITE MAY RETURN A POSITIVE VALUE

LESS THAN THE NUMBER REQUESTED. HENCE WE CALL THE TWO PROCEDURES

BELOW TO TAKE CARE OF SUCH EXIGENCIES */

int readn(int sd,char *ptr,int size)

{ int no_left,no_read;

no_left = size;

while (no_left 0)

{ no_read = read(sd,ptr,no_left);

if(no_read 0) return(no_read);

if (no_read == 0) break;

no_left -= no_read;

ptr += no_read;

}

return(size - no_left);

}

int writen(int sd,char *ptr,int size)

{ int no_left,no_written;

no_left = size;

while (no_left 0)

{ no_written = write(sd,ptr,no_left);

if(no_written =0) return(no_written);

no_left -= no_written;

ptr += no_written;

}

return(size - no_left);

}

服务端

#include stdio.h

#include sys/types.h

#include sys/socket.h

#include netinet/in.h

#include arpa/inet.h

#include time.h

#include errno.h

#define MY_PORT_ID 6081

#define MAXLINE 256

#define MAXSIZE 512

#define ACK 2

#define NACK 3

#define REQUESTFILE 100

#define COMMANDNOTSUPPORTED 150

#define COMMANDSUPPORTED 160

#define BADFILENAME 200

#define FILENAMEOK 400

int writen(int sd,char *ptr,int size);

int readn(int sd,char *ptr,int size);

main() {

int sockid, newsd, pid, clilen;

struct sockaddr_in my_addr, client_addr;

printf("server: creating socket\n");

if ((sockid = socket(AF_INET,SOCK_STREAM,0)) 0)

{printf("server: socket error : %d\n", errno); exit(0); }

printf("server: binding my local socket\n");

bzero((char *) my_addr,sizeof(my_addr));

my_addr.sin_family = AF_INET;

my_addr.sin_port = htons(MY_PORT_ID);

my_addr.sin_addr.s_addr = htons(INADDR_ANY);

if (bind(sockid ,(struct sockaddr *) my_addr,sizeof(my_addr)) 0)

{printf("server: bind error :%d\n", errno); exit(0); }

printf("server: starting listen \n");

if (listen(sockid,5) 0)

{ printf("server: listen error :%d\n",errno);exit(0);}

while(1==1) {

/* ACCEPT A CONNECTION AND THEN CREATE A CHILD TO DO THE WORK */

/* LOOP BACK AND WAIT FOR ANOTHER CONNECTION */

printf("server: starting accept\n");

if ((newsd = accept(sockid ,(struct sockaddr *) client_addr,

clilen)) 0)

{printf("server: accept error :%d\n", errno); exit(0); }

printf("server: return from accept, socket for this ftp: %d\n",

newsd);

if ( (pid=fork()) == 0) {

/* CHILD PROC STARTS HERE. IT WILL DO ACTUAL FILE TRANSFER */

close(sockid); /* child shouldn't do an accept */

doftp(newsd);

close (newsd);

exit(0); /* child all done with work */

}

/* PARENT CONTINUES BELOW HERE */

close(newsd); /* parent all done with client, only child */

} /* will communicate with that client from now on */

}

java启动FTP SERVER服务

userManagerFactory.setFile(new File("myusers.properties"));

这个应该放文件路径而不是 "myusers.properties"(也可能是文件位置没放好,先放绝对路径测试下)

如何用Java实现FTP服务器

FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议。在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download)。FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。使用FTP可以传送所有类型的文件,如文本文件、二进制可执行文件、图象文件、声音文件和数据压缩文件等。

FTP 命令

FTP 的主要操作都是基于各种命令基础之上的。常用的命令有:

设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式;

目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令);

连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;

发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机;

获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。

?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635

import java.net.Socket;import org.apache.log4j.Logger;/** * 角色——服务器A * @author Leon * */public class ServerA{ public static void main(String[] args){ final String F_DIR = "c:/test";//根路径 final int PORT = 22;//监听端口号 Logger.getRootLogger(); Logger logger = Logger.getLogger("com"); try{ ServerSocket s = new ServerSocket(PORT); logger.info("Connecting to server A..."); logger.info("Connected Successful! Local Port:"+s.getLocalPort()+". Default Directory:'"+F_DIR+"'."); while( true ){ //接受客户端请求 Socket client = s.accept(); //创建服务线程 new ClientThread(client, F_DIR).start(); } } catch(Exception e) { logger.error(e.getMessage()); for(StackTraceElement ste : e.getStackTrace()){ logger.error(ste.toString()); } } }}import java.io.BufferedReader; import java.io.File;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.io.RandomAccessFile;import java.net.ConnectException;import java.net.InetAddress;import java.net.ServerSocket;import java.net.Socket;import java.net.UnknownHostException;import java.nio.charset.Charset;import java.util.Random;import org.apache.log4j.Logger;/** * 客户端子线程类 * @author Leon * */public class ClientThread extends Thread { private Socket socketClient;//客户端socket private Logger logger;//日志对象 private String dir;//绝对路径 private String pdir = "/";//相对路径 private final static Random generator = new Random();//随机数 public ClientThread(Socket client, String F_DIR){ this.socketClient = client; this.dir = F_DIR; } @Override public void run() { Logger.getRootLogger(); logger = Logger.getLogger("com"); InputStream is = null; OutputStream os = null; try { is = socketClient.getInputStream(); os = socketClient.getOutputStream(); } catch (IOException e) { logger.error(e.getMessage()); for(StackTraceElement ste : e.getStackTrace()){ logger.error(ste.toString()); } } BufferedReader br = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); PrintWriter pw = new PrintWriter(os); String clientIp = socketClient.getInetAddress().toString().substring(1);//记录客户端IP String username = "not logged in";//用户名 String password = "";//口令 String command = "";//命令 boolean loginStuts = false;//登录状态 final String LOGIN_WARNING = "530 Please log in with USER and PASS first."; String str = "";//命令内容字符串 int port_high = 0; int port_low = 0; String retr_ip = "";//接收文件的IP地址 Socket tempsocket = null; //打印欢迎信息 pw.println("220-FTP Server A version 1.0 written by Leon Guo"); pw.flush(); logger.info("("+username+") ("+clientIp+") Connected, sending welcome message..."); logger.info("("+username+") ("+clientIp+") 220-FTP Server A version 1.0 written by Leon Guo"); boolean b = true; while ( b ){ try { //获取用户输入的命令 command = br.readLine(); if(null == command) break; } catch (IOException e) { pw.println("331 Failed to get command"); pw.flush(); logger.info("("+username+") ("+clientIp+") 331 Failed to get command"); logger.error(e.getMessage()); for(StackTraceElement ste : e.getStackTrace()){ logger.error(ste.toString()); } b = false; } /* * 访问控制命令 */ // USER命令 if(command.toUpperCase().startsWith("USER")){ logger.info("(not logged in) ("+clientIp+") "+command); username = command.substring(4).trim(); if("".equals(username)){ pw.println("501 Syntax error"); pw.flush(); logger.info("(not logged in) ("+clientIp+") 501 Syntax error"); username = "not logged in"; } else{ pw.println("331 Password required for " + username); pw.flush(); logger.info("(not logged in) ("+clientIp+") 331 Password required for " + username); } loginStuts = false; } //end USER // PASS命令 else if(command.toUpperCase().startsWith("PASS")){ logger.info("(not logged in) ("+clientIp+") "+command); password = command.substring(4).trim(); if(username.equals("root") password.equals("root")){ pw.println("230 Logged on"); pw.flush(); logger.info("("+username+") ("+clientIp+") 230 Logged on");// logger.info("客户端 "+clientIp+" 通过 "+username+"用户登录"); loginStuts = true; } else{ pw.println("530 Login or password incorrect!"); pw.flush(); logger.info("(not logged in) ("+clientIp+") 530 Login or password incorrect!"); username = "not logged in"; } } //end PASS // PWD命令 else if(command.toUpperCase().startsWith("PWD")){ logger.info("("+username+") ("+clientIp+") "+command); if(loginStuts){// logger.info("用户"+clientIp+":"+username+"执行PWD命令"); pw.println("257 /""+pdir+"/" is current directory"); pw.flush(); logger.info("("+username+") ("+clientIp+") 257 /""+pdir+"/" is current directory"); } else{ pw.println(LOGIN_WARNING); pw.flush(); logger.info("("+username+") ("+clientIp+") "+LOGIN_WARNING); } } //end PWD // CWD命令 else if(command.toUpperCase().startsWith("CWD")){ logger.info("("+username+") ("+clientIp+") "+command); if(loginStuts){ str = command.substring(3).trim(); if("".equals(str)){ pw.println("250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory."); pw.flush(); logger.info("("+username+") ("+clientIp+") 250 Broken client detected, missing argument to CWD. /""+pdir+"/" is current directory."); } else{ //判断目录是否存在 String tmpDir = dir + "/" + str; File file = new File(tmpDir); if(file.exists()){//目录存在 dir = dir + "/" + str; if("/".equals(pdir)){ pdir = pdir + str; } else{ pdir = pdir + "/" + str; }// logger.info("用户"+clientIp+":"+username+"执行CWD命令"); pw.println("250 CWD successful. /""+pdir+"/" is current directory"); pw.flush(); logger.info("("+username+") ("+clientIp+") 250 CWD successful. /""+pdir+"/" is current directory"); } else{//目录不存在 pw.println("550 CWD failed. /""+pdir+"/": directory not found."); pw.flush(); logger.info("("+username+") ("+clientIp+") 550 CWD failed. /""+pdir+"/": directory not found.");

启动“ftp-server”后输入“ftp://localhost”没反应是什么情况?

ftplocalhost

的意思是启动localhost中的FTP也就是对本地服务器进行操作!

如果你的系统中没有安装相关服务敞丁搬股植噶邦拴鲍茎器程序的话,是没有用的。

==========

当然如果出现“未知错误号”就是你输入错误或者是没有安装相关服务器程序。

FTPServer服务器是一种专供其他电脑检索文件和存储的特殊电脑。文件服务器通常比一般的个人电脑拥有更大的存储容量,并具有一些其他的功能,如磁盘镜像、多个网络接口卡、热备援多电源供应器。到后来,文件服务器逐渐进化成带有RAID(RedundantArrayofIndependentDisk)存储子系统和其他高可用特性的高性能系统。

ftpserver代码的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于ftp java代码、ftpserver代码的信息别忘了在本站进行查找喔。

版权说明:如非注明,本站文章均为 AH站长 原创,转载请注明出处和附带本文链接;

本文地址:http://ahzz.com.cn/post/2937.html


取消回复欢迎 发表评论:

分享到

温馨提示

下载成功了么?或者链接失效了?

联系我们反馈

立即下载