编写FTP服务的扫描程序
1. 理光3501安装ftp扫描方法
理光FTP扫描设置教程
此教程主要用来解决WIN10系统下不能使用SMB文件夹扫描的问题,由于旧的SMB协议存在安全漏洞,所以微软在新的系统,WIN8/WIN10/SERVER2012 2016 2018里使用了新的SMB传输协议,理光03以下的机器使用的是老的SMB协议,所以要解决这个问题,可以选择升级复印机固定或者采用FTP传输的方式,在这里东莞乐印办公(www.leyinoa.com)以WIN7系统为例,其他版本的系统大同小异,有些功能可能位置不同,因为大部分都是行业从业人员,具备一定的电脑基础,不再详细说明,这里把关键点都列举出来,
1. 开通FTP服务
控制面板-程序和功能-打开和关闭WINDOWS功能-勾选“Internet信息服务”下的所有项目(FTP服务器、WEB管理工具、万维网服务),点确定,稍等几分钟。
2. 计算机点右键-管理-服务和应用程序-INTERNET信息服务(IIS)管理器-网站点右键-添加FTP站点。FTP站定名称:FTP-SCAN,物理路径选中你要存放扫描的文件夹,IP地址输入本机的IP地址,SSL选择无,身份验证选择匿名,允许访问选择所有用户,权限勾选读取和写入。完成之后先新建一个名为scan 的计算机用户,密码设置为scan123。
3.选中FTP站点,点击右边的“基本设置”出现以下对话框,连接为需要输入2步骤新建的用户和密码,测试设置中身份认证和授权两个都通过才可以
4.FTP服务已经创建完了,在网页上登录打印的IP地址,进入地址簿管理,新建一个地址簿,协议选择FTP,服务器名称就是刚才建FTP时输入的IP地址,路径为空,登录用户名称为匿名账号:anonymous 密码为空。登记完毕,测试扫描OK。
2. 编写一个简单的FTP客户机程序,要求能够向FTP服务器发送命令,并接收FTP服务器返回的响应与数据. 谢谢了~
点量Http/FTP组件的功能简介:
标准Http和FTP下载支持:完全标准的Http和FTP协议支持,内部通过网址自动区分是Http还是FTP下载。
极速下载(2.0以后版本):超越国内绝大多数下载软件的下载速度。新版内核在2M ADSL的环境下下载,有些文件的速度可以达到1400K字节/秒以上,超过了带宽的极限。下载速度可以用极速形容。
多线程传输:可以将文件自动分块,并采用多线程下载。并可自由设置线程数目。
断点续传:点量Http/FTP有优秀的断点续传支持,每次启动自动从上次下载的位置开始,不需要重复下载。
提供详细的下载详情接口(2.0以后版本):可以看到整个下载过程的步骤,比如开启了多少线程、服务器的应答过程、错误信息等。
支持多种高级设置:设置线程数目、磁盘缓存大小、搜索镜像服务器的详细参数设置、下载文件完成后同步文件为服务器上的文件时间、下载过程中可以自定义文件临时后缀、未完成的文件设为隐藏属性。
支持磁盘缓存:点量Http/FTP下载DLL支持设置磁盘缓存,减少对磁盘的读写,并提升下载速度。
支持设置Refer:点量Http/FTP下载组件支持设置下载时的Refer,以便可以绕过一些防盗链的网站,直接下载内容。
限速功能:点量Http/FTP下载组件可方便的设置下载限速。
多种磁盘分配方式:点量Http/FTP下载组件支持预分配和边下载边分配两种磁盘方式,满足多种下载需求。
自动搜索镜像加速:点量Http/FTP内置了镜像搜索功能,在下载文件的同时,会自动搜索哪些其它网站还有这个文件,自动从其它网址下载加速。
可提供源码:支付一定的费用,便可以获得全部的点量Http/FTP下载组件的源代码,免除您的所有后顾之忧。
良好的服务:作为点量软件旗下的软件,可享受到点量软件的优秀服务,我们的服务让您如同拥有一个称心的专业员工。
点量Http/FTP 下载组件可以适用于任何Http和FTP下载的领域,让您可以在1天内完成一个完整的Http下载软件的全部功能。比如,您可以用于产品的升级、文件的下载和传输等。
3. 求用java写一个ftp服务器客户端程序。
import java.io.*;
import java.net.*;public class ftpServer extends Thread{ public static void main(String args[]){
String initDir;
initDir = "D:/Ftp";
ServerSocket server;
Socket socket;
String s;
String user;
String password;
user = "root";
password = "123456";
try{
System.out.println("MYFTP服务器启动....");
System.out.println("正在等待连接....");
//监听21号端口
server = new ServerSocket(21);
socket = server.accept();
System.out.println("连接成功");
System.out.println("**********************************");
System.out.println("");
InputStream in =socket.getInputStream();
OutputStream out = socket.getOutputStream();
DataInputStream din = new DataInputStream(in);
DataOutputStream dout=new DataOutputStream(out);
System.out.println("请等待验证客户信息....");
while(true){
s = din.readUTF();
if(s.trim().equals("LOGIN "+user)){
s = "请输入密码:";
dout.writeUTF(s);
s = din.readUTF();
if(s.trim().equals(password)){
s = "连接成功。";
dout.writeUTF(s);
break;
}
else{s ="密码错误,请重新输入用户名:";<br> dout.writeUTF(s);<br> <br> }
}
else{
s = "您输入的命令不正确或此用户不存在,请重新输入:";
dout.writeUTF(s);
}
}
System.out.println("验证客户信息完毕...."); while(true){
System.out.println("");
System.out.println("");
s = din.readUTF();
if(s.trim().equals("DIR")){
String output = "";
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
for(int i=0;i<dirStructure.length;i++){
output +=dirStructure[i]+"\n";
}
s=output;
dout.writeUTF(s);
}
else if(s.startsWith("GET")){
s = s.substring(3);
s = s.trim();
File file = new File(initDir);
String[] dirStructure = new String[10];
dirStructure= file.list();
String e= s;
int i=0;
s ="不存在";
while(true){
if(e.equals(dirStructure[i])){
s="存在";
dout.writeUTF(s);
RandomAccessFile outFile = new RandomAccessFile(initDir+"/"+e,"r");
byte byteBuffer[]= new byte[1024];
int amount;
while((amount = outFile.read(byteBuffer)) != -1){
dout.write(byteBuffer, 0, amount);break;
}break;
}
else if(i<dirStructure.length-1){
i++;
}
else{
dout.writeUTF(s);
break;
}
}
}
else if(s.startsWith("PUT")){
s = s.substring(3);
s = s.trim();
RandomAccessFile inFile = new RandomAccessFile(initDir+"/"+s,"rw");
byte byteBuffer[] = new byte[1024];
int amount;
while((amount =din.read(byteBuffer) )!= -1){
inFile.write(byteBuffer, 0, amount);break;
}
}
else if(s.trim().equals("BYE"))break;
else{
s = "您输入的命令不正确或此用户不存在,请重新输入:";
dout.writeUTF(s);
}
}
din.close();
dout.close();
in.close();
out.close();
socket.close();
}
catch(Exception e){
System.out.println("MYFTP关闭!"+e);
}
}}
4. 用C语言写一个FTP的客户端程序,需要了解哪些知识
一、需要的知识点:
1、SOCKET技术,网络编程的基本功能
2、FTP
3、如果需要自己写,可能需要熟悉各个网络框架
二、编写FTP所需要掌握的框架
1、wininet
2、libcurl
5. 给出一个C++或Java编写的ftp服务器程序
给你一个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];
GetMoleFileName(NULL, filepath, MAX_PATH);
strDir.Format("%s", filepath);
strPath = strDir.Left(strDir.ReverseFind('\\')) + strDate + "\\*.txt";
return strPath;
}
//保存成两个文件,然后添加到你的工程中就可以调用了。
6. 一、 编写一个简易的FTP客户端程序,要求能够通过用户名,密码以及URL地址浏览和下载FTP服务器上的资源。
java界面?纯java程序吗,还是jsp。纯java程序的话,需要引入java.net.url包。
try{getAppletContext().showDocument(new URL("http://www.163.com"),"打开位置");}
catch(Exception ex) {System.out.println("error"); }
就超链接了。
FTP连接可以写为如 ftp://用户名:密码@163.com
7. 求MFC编写的FTP服务器和客户端程序
我这有一个以前自学用的例子,你看看需要不?
运行程序,打开程序主界面,如图1.1所示。输入FTP服务器IP地址、服务器端口、用户名及密码,单击“快速登录”按钮,连接FTP服务器。连接成功后,设置下载文件存储目录,然后就可以上传及下载文件了。下载文件过程中,可以暂停及删除下载任务。
图1.1 FTP文件上传下载模块主窗口
在“功能选项”菜单下选择“下载后关机”命令,文件下载完成后,自动关闭计算机。
8. 给出一个C++或Java编写的ftp服务器程序
Socket TCP
反射API介绍
4.Java Socket编程 TCP 协议编程
1) TCP工作模型: 先找
堂(主机/IP), 到食堂以后找窗口
(Socket/套接字 端口号), 服务员等待连接,客户向服务仔知兆员发起连接
连接以后, 一个窗口可以为每个客户安排一个服务员(线程)提供服务,
每个服务过程可以双向交流通讯(流), 通讯完成后要关闭连接.
5. TCP 服务端编程(食堂)(java.io.*,java.net.*,java.lang.*)
1) 创建ServerSocket实例绑定一个服务端口(Socket/套接字 端口号)
2) 开始ServerSocket实例 的监听, 等待客户端的连接
3) 如果有客户连接进来, 就获得了客户的套接字(Socket)实例
客户的套接字(Socket)实例中包念租括与客户端建立的连接流
4) 为这个客户(Socket) 创建一个服务线程, 提供服务(run方法)
5) 继续等待下一个连接, 返回到2)
6) 服务线程 完成通讯服务过程
7) 端口号: 0~65535, 1K以下留给系统使用
6. TCP 客户端编程
1) 创建Socket 实例, 连接到服务器端, 成功创建猛贺s就表示连接到了
服务器
Socket s = new Socket("host", port)
2) 客户端 Socket 与服务器端 Socket 对应, 都包含输入, 输出流
客户端的s.getInputStream() 连接于服务器s.getOutputStream()
客户端的s.getOutputStream()连接于服务器s.getInputStream()
3) 使用线程处理 网络流
7. Java 反射
1) 反射是Java自我管理(类, 对象)的机制
2) * 可以通过反射机制发现对象的类型 发现类型的方法/属性/构造器
3) * Java 反射 可以创建对象 并 访问任意对象方法和属性等
4) Class 加载
类加载到内存: java 将磁盘类文件加载到内存中,为一个对象(实例)
这个对象是Class的实例, 也就是 这些对象都是Class实例
5)Class 实例代表Java中类型, 基本类型的类型: int.class, long.class
类类型 Class 实例获得如下:
Class cls = String.class;
Class cls = Class.forName("java.lang.String");
Class cls = "abc".getClass();
以上方法获得cls 是同一个对象, 就是String 类内存加载的结果
package javase2.day06.ftp;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
/**
* ftp 客户端 可以使用命令 ls pwd get
*/
public class FtpClient {
public static void main(String[] args)
throws IOException{
FtpClient client = new FtpClient();
client.open();
}
public void open() throws IOException{
Socket s = new Socket("localhost", 9000);
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
//处理客户端对服务器的请求
new RequestProcess(out).start();
//处理服务器的反馈信息
new ResponseProcess(in).start();
}
//处理客户端对服务器的请求
class RequestProcess extends Thread{
OutputStream out;
public RequestProcess(OutputStream out) {
this.out = out;
}
public void run() {
try{
Scanner sc = new Scanner(System.in);
while(true){
String s = sc.nextLine();
IOUtils.println(out, s);
if(s.equals("bye")){
System.exit(0);
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
class ResponseProcess extends Thread{
InputStream in;
public ResponseProcess(InputStream in) {
this.in = in;
}
public void run() {
try{
while(true){
String header = IOUtils.readLine(in);
if(header.startsWith("text,")){
show(header,in);
}else if(header.startsWith("file,")){
save(header, in);
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
public void show(String header, InputStream in)
throws IOException {
int n = Integer.parseInt(header.split(",")[1]);
for(int i=0; i<n; i++){
String s = IOUtils.readLine(in);
System.out.println(s);
}
}
public void save(String header, InputStream in)
throws IOException{
File dir = new File("ftp");
if(!dir.exists()){
dir.mkdir();
}
//header: file,10,filename
String[] data = header.split(",");
long length = Long.parseLong(data[1]);
String filename = data[2];
File file = new File(dir, filename);
BufferedOutputStream out =
new BufferedOutputStream(
new FileOutputStream(file));
for(long i=0; i<length; i++){
int b = in.read();
out.write(b);
}
out.close();
}
}
package javase2.day06.ftp;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 模拟FTP服务器, 支持命令pwd,ls,get file
*
* 协议: type,length,value TLV格式
*
* 文本: text,5\nline1\nline2\nline3\nline4\nline5\n
* 文件: file,4,filename\n 41 42 43 44
*
* text,5\nline1\nline2\nline3\nline4\nline5\nfile,4,filename\n 41 42 43 44
*/
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();
//向客户端发送, 先发协议头,再发送文本行
out.write("text,1\n".getBytes());//协议头
//发送消息内容, 一行文本消息
out.write("欢迎使用FTP演示服务器!\n".getBytes());
out.flush();
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{
out.write("text,1\n".getBytes());//协议头
out.write("只支持pwd,ls,get,bye!\n".getBytes());
out.flush();
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}
public void pwd(OutputStream out)
throws IOException{
File dir = new File(".");
IOUtils.println(out, "text,1");
IOUtils.println(out, dir.getCanonicalPath());
}
public void ls(OutputStream out)
throws IOException{
File dir = new File(".");
File[] files = dir.listFiles();
IOUtils.println(out, "text,"+files.length);
for (File f : files) {
if(f.isDirectory()){
IOUtils.println(out, "["+f.getName()+"]");
}else{
IOUtils.println(out, f.getName());
}
}
}
public void get(String cmd, OutputStream out)
throws IOException{
//cmd="get filename"
String name = cmd.split("\\s+")[1];
File file = new File(name);
if(! file.exists()){
IOUtils.println(out, "text,1");
IOUtils.println(out, "没有文件呀!"+name);
return;
}
//文件协议头:
IOUtils.println(out,
"file,"+file.length()+","+name);
FileInputStream in =
new FileInputStream(file);
IOUtils.cp(in, out);
out.flush();
in.close();
IOUtils.println(out, "text,1");
IOUtils.println(out, "发送成功:"+name);
}
}
9. 如何在win10系统搭建ftp服务
FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。
Windows10设置FTP步骤大致如下:
右键开始菜单中选择”控制面板“,进入控制面板;
在控制面板中选择”程序“,进入程序设置界面;
在程序界面中的“程序和功能”中,点击选择“启用或关闭Windows功能”,弹出“Windows功能”框;
找到“Internet Information Services ”项,将“Internet Information Services ”项中的FTP服务器、Web服务器、万维网服务等所有功能前的框勾上,点击确定,Windows将自动配置相关功能;
系统配置完成后,依次打开控制面板,选择“系统和安全”,进入“系统和安全”界面后找到并打开“管理工具”;
在管理工具界面,点击打开“Internet Information Services (IIS)管理器”,进入(IIS)管理器后,在左栏的“网站”上点击右键,选择“添加FTP站点;
在“添加FTP站点”界面填写ftp站点名称,及物理路径等信息,点击下一步;
设置IP地址及SSL等,(一般SSL选择“无SSL”)单击下一步;
设置FTP身份验证及授权信息,点击完成即可FTP服务器的设置。