给出一个C++或Java编写的ftp服务器程序
给一个C++或Java编写的ftp服务器程序,给出后我会给你追加100点,如果给不出,那告诉我一些需要的相关知识和设计思路也可以...
给一个C++或Java编写的ftp服务器程序,给出后我会给你追加100点,如果给不出,那告诉我一些需要的相关知识和设计思路也可以
展开
5个回答
2013-06-02
展开全部
给你一个MFC写的:
// FtpClient.h: interface for the CFtpServer class.
//
#if !defined(_FTPCLIENT_H)
#define _FTPCLIENT_H
#include <afxinet.h>
class CFtpClient
{
//构造/析构函数
public:
CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser, const char *pszFtpPassWord);
//功能:构造函数
//参数:pszFtpIp---------Ftp服务器IP地址
// pszFtpPort-------Ftp服务器端口
// pszFtpUser-------Ftp用户名
// pszFtpPassWord---Ftp用户密码
//返回值:无
virtual ~CFtpClient();
//功能:析构函数
//参数:无
//返回值:无
//公有成员函数
public:
BOOL ConnectFtpServer();
//功能:连接FTP服务器
//参数:无
//返回值:TRUE--连接成功,FALSE--连接失败
void DisConnectFtpServer();
//功能:断开与FTP服务器的连接
//参数:无
//返回值:无
BOOL PutFileToFtpServer(const char *pszFilePath);
//功能:上传指定的文件到FTP服务器
//参数:要上传的文件名
//返回值:TRUE--连接成功,FALSE--连接失败
BOOL GetFileFromFtpServer(const char *pszFilePath);
//功能:从FTP服务器下载指定文件
//参数:要下载的文件名
//返回值:TRUE--连接成功,FALSE--连接失败
CString GetUpLoadFilePath();
//功能:得到上传文件名
//参数:无
//返回值:得到的当前路径
//私有成员变量
private:
char m_szFtpIp[20]; //Ftp服务器IP地址
UINT m_uFtpPort; //Ftp服务器端口
char m_szFtpUser[20]; //Ftp用户名
char m_szFtpPassWord[20]; //Ftp用户密码
CInternetSession *m_pInetSession; //Internet会话对象指针
CFtpConnection *m_pFtpConnection; //FTP服务连接对象指针
};
#endif
// FtpClient.cpp: implementation of the CFtpServer class.
//
#include "FtpClient.h"
CFtpClient::CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser,const char *pszFtpPassWord)
{
strcpy(m_szFtpIp, pszFtpIp);
m_uFtpPort = atoi(pszFtpPort);
strcpy(m_szFtpUser, pszFtpUser);
strcpy(m_szFtpPassWord, pszFtpPassWord);
m_pInetSession = NULL;
m_pFtpConnection = NULL;
}
CFtpClient::~CFtpClient()
{
}
BOOL CFtpClient::ConnectFtpServer()
{
//创建Internet会话
m_pInetSession = new CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS);
try
{
//连接Ftp服务器
m_pFtpConnection = m_pInetSession->GetFtpConnection(m_szFtpIp, m_szFtpUser, m_szFtpPassWord, m_uFtpPort);
}
catch(CInternetException *pEx)
{
char szError[1024];
pEx->GetErrorMessage(szError, 1024);
pEx->Delete();
CLog Log;
Log.RecordLog("连接Ftp服务器", CString("9999"), CString(szError));
return FALSE;
}
return TRUE;
}
void CFtpClient::DisConnectFtpServer()
{
if(m_pFtpConnection != NULL)
{
m_pFtpConnection->Close();
delete m_pFtpConnection;
m_pFtpConnection = NULL;
}
if(m_pInetSession !=NULL)
{
m_pInetSession->Close();
delete m_pInetSession;
m_pInetSession = NULL;
}
}
BOOL CFtpClient::PutFileToFtpServer(const char *pszFilePath)
{
//1. 判断服务器是否连接
if(m_pFtpConnection == NULL)
{
return FALSE;
}
char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};
//2. 本地文件名
sprintf(szLocalFile, "%s", pszFilePath);
//3. 远程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};
_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);
//4. 文件上传
if(!m_pFtpConnection->PutFile(szLocalFile, szRemoteFile))
{
return FALSE;
}
return TRUE;
}
BOOL CFtpClient::GetFileFromFtpServer(const char *pszFilePath)
{
//1. 判断服务器是否连接
if(m_pFtpConnection == NULL)
{
return FALSE;
}
char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};
//2. 本地文件名
sprintf(szLocalFile,"%s",pszFilePath);
//3. 远程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};
_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);
//4. 文件下载
if(!m_pFtpConnection->GetFile(szRemoteFile, szLocalFile))
{
return FALSE;
}
return TRUE;
}
CString CFtpClient::GetUpLoadFilePath()
{
CString strPath = "", strDir = "";
//得到当前日期
CTime time = CTime::GetCurrentTime();
CString strDate = time.Format("%Y%m%d");
//得到上传文件路径
char filepath[MAX_PATH];
GetModuleFileName(NULL, filepath, MAX_PATH);
strDir.Format("%s", filepath);
strPath = strDir.Left(strDir.ReverseFind('\\')) + strDate + "\\*.txt";
return strPath;
}
//保存成两个文件,然后添加到你的工程中就可以调用了。
// FtpClient.h: interface for the CFtpServer class.
//
#if !defined(_FTPCLIENT_H)
#define _FTPCLIENT_H
#include <afxinet.h>
class CFtpClient
{
//构造/析构函数
public:
CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser, const char *pszFtpPassWord);
//功能:构造函数
//参数:pszFtpIp---------Ftp服务器IP地址
// pszFtpPort-------Ftp服务器端口
// pszFtpUser-------Ftp用户名
// pszFtpPassWord---Ftp用户密码
//返回值:无
virtual ~CFtpClient();
//功能:析构函数
//参数:无
//返回值:无
//公有成员函数
public:
BOOL ConnectFtpServer();
//功能:连接FTP服务器
//参数:无
//返回值:TRUE--连接成功,FALSE--连接失败
void DisConnectFtpServer();
//功能:断开与FTP服务器的连接
//参数:无
//返回值:无
BOOL PutFileToFtpServer(const char *pszFilePath);
//功能:上传指定的文件到FTP服务器
//参数:要上传的文件名
//返回值:TRUE--连接成功,FALSE--连接失败
BOOL GetFileFromFtpServer(const char *pszFilePath);
//功能:从FTP服务器下载指定文件
//参数:要下载的文件名
//返回值:TRUE--连接成功,FALSE--连接失败
CString GetUpLoadFilePath();
//功能:得到上传文件名
//参数:无
//返回值:得到的当前路径
//私有成员变量
private:
char m_szFtpIp[20]; //Ftp服务器IP地址
UINT m_uFtpPort; //Ftp服务器端口
char m_szFtpUser[20]; //Ftp用户名
char m_szFtpPassWord[20]; //Ftp用户密码
CInternetSession *m_pInetSession; //Internet会话对象指针
CFtpConnection *m_pFtpConnection; //FTP服务连接对象指针
};
#endif
// FtpClient.cpp: implementation of the CFtpServer class.
//
#include "FtpClient.h"
CFtpClient::CFtpClient(const char *pszFtpIp, const char *pszFtpPort, const char *pszFtpUser,const char *pszFtpPassWord)
{
strcpy(m_szFtpIp, pszFtpIp);
m_uFtpPort = atoi(pszFtpPort);
strcpy(m_szFtpUser, pszFtpUser);
strcpy(m_szFtpPassWord, pszFtpPassWord);
m_pInetSession = NULL;
m_pFtpConnection = NULL;
}
CFtpClient::~CFtpClient()
{
}
BOOL CFtpClient::ConnectFtpServer()
{
//创建Internet会话
m_pInetSession = new CInternetSession(AfxGetAppName(), 1, PRE_CONFIG_INTERNET_ACCESS);
try
{
//连接Ftp服务器
m_pFtpConnection = m_pInetSession->GetFtpConnection(m_szFtpIp, m_szFtpUser, m_szFtpPassWord, m_uFtpPort);
}
catch(CInternetException *pEx)
{
char szError[1024];
pEx->GetErrorMessage(szError, 1024);
pEx->Delete();
CLog Log;
Log.RecordLog("连接Ftp服务器", CString("9999"), CString(szError));
return FALSE;
}
return TRUE;
}
void CFtpClient::DisConnectFtpServer()
{
if(m_pFtpConnection != NULL)
{
m_pFtpConnection->Close();
delete m_pFtpConnection;
m_pFtpConnection = NULL;
}
if(m_pInetSession !=NULL)
{
m_pInetSession->Close();
delete m_pInetSession;
m_pInetSession = NULL;
}
}
BOOL CFtpClient::PutFileToFtpServer(const char *pszFilePath)
{
//1. 判断服务器是否连接
if(m_pFtpConnection == NULL)
{
return FALSE;
}
char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};
//2. 本地文件名
sprintf(szLocalFile, "%s", pszFilePath);
//3. 远程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};
_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);
//4. 文件上传
if(!m_pFtpConnection->PutFile(szLocalFile, szRemoteFile))
{
return FALSE;
}
return TRUE;
}
BOOL CFtpClient::GetFileFromFtpServer(const char *pszFilePath)
{
//1. 判断服务器是否连接
if(m_pFtpConnection == NULL)
{
return FALSE;
}
char szLocalFile[200] = {0};
char szRemoteFile[200] = {0};
//2. 本地文件名
sprintf(szLocalFile,"%s",pszFilePath);
//3. 远程文件名
char szDrive[10] = {0};
char szDir[210] = {0};
char szFileName[70] = {0};
char szExt[10] = {0};
_splitpath(pszFilePath, szDrive, szDir, szFileName, szExt);
sprintf(szRemoteFile, "%s\\%s.%s", g_strEnterpriseID, szFileName, szExt);
//4. 文件下载
if(!m_pFtpConnection->GetFile(szRemoteFile, szLocalFile))
{
return FALSE;
}
return TRUE;
}
CString CFtpClient::GetUpLoadFilePath()
{
CString strPath = "", strDir = "";
//得到当前日期
CTime time = CTime::GetCurrentTime();
CString strDate = time.Format("%Y%m%d");
//得到上传文件路径
char filepath[MAX_PATH];
GetModuleFileName(NULL, filepath, MAX_PATH);
strDir.Format("%s", filepath);
strPath = strDir.Left(strDir.ReverseFind('\\')) + strDate + "\\*.txt";
return strPath;
}
//保存成两个文件,然后添加到你的工程中就可以调用了。
2013-06-02
展开全部
给你一个java写的 import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class FtpServer {
public static void main(String[] args) throws IOException {
FtpServer server=new FtpServer();
server.start();
}
public void start() throws IOException{
ServerSocket ss=new ServerSocket(9000);
while(true){
Socket s=ss.accept();
new Agent(s).start();
}
}
class Agent extends Thread{
Socket s;
public Agent(Socket s){
this.s=s;
}
public void run(){
try {
InputStream in=s.getInputStream();
OutputStream out=s.getOutputStream();
IOUtils.println(out, "text,1");
IOUtils.println(out, "欢迎使用FTP演示服务器");
while(true){
String cmd=IOUtils.readLine(in).trim();
if("pwd".equals(cmd)){
pwd(out);
}else if("ls".equals(cmd)){
ls(out);
}else if(cmd.startsWith("get")){
get(cmd,out);
}else if("bye".equalsIgnoreCase(cmd)){
IOUtils.println(out, "text,1");
IOUtils.println(out, "bye.bye");
s.close();
}else{
IOUtils.println(out, "text,1");
IOUtils.println(out, "只支持 pwd,ls,get");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class FtpServer {
public static void main(String[] args) throws IOException {
FtpServer server=new FtpServer();
server.start();
}
public void start() throws IOException{
ServerSocket ss=new ServerSocket(9000);
while(true){
Socket s=ss.accept();
new Agent(s).start();
}
}
class Agent extends Thread{
Socket s;
public Agent(Socket s){
this.s=s;
}
public void run(){
try {
InputStream in=s.getInputStream();
OutputStream out=s.getOutputStream();
IOUtils.println(out, "text,1");
IOUtils.println(out, "欢迎使用FTP演示服务器");
while(true){
String cmd=IOUtils.readLine(in).trim();
if("pwd".equals(cmd)){
pwd(out);
}else if("ls".equals(cmd)){
ls(out);
}else if(cmd.startsWith("get")){
get(cmd,out);
}else if("bye".equalsIgnoreCase(cmd)){
IOUtils.println(out, "text,1");
IOUtils.println(out, "bye.bye");
s.close();
}else{
IOUtils.println(out, "text,1");
IOUtils.println(out, "只支持 pwd,ls,get");
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-02
展开全部
这个主要就是socket和输入流输出流的应用了,老师教的时候写了个简单的,两个类,客户端和服务器,客户端比较简单就是连接到服务器,然后发送指令然后接收数据就可以了,服务器比较复杂,在开启端口,然后一个服务线程,为每个连接到服务器的客户端创建一个新的线程。还要创建线程接收客户端的指令,这个是小型的玩具代码啦!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-02
展开全部
用SOCKET编程端口自定建立一个服务器线程一直侦听请求 另建立一个客户端线程去发送请求其他的无非就是IO的操作了这只是思路
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-06-02
展开全部
哈哈,毕业设计做什么?小子
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |