1、如何架设简单的FTP服务器,并写出详细步骤?
在网上做过软件下载的人都知道,建立一个FTP下载服务器相对比较简单,一般用WIN2000下自带的IIS就可以,但IIS在功能上好多都不尽人如意,下面我就介绍一款功能非常强大,但使用简单的FTP服务器构建软件-Serv-U FTP Server,让我们也来体验一下自己DIY FTP服务器的快乐! 在说明使用之前,让我先大致介绍一下Serv-U(本文中提到Serv-U版本为3.0.0.17), Serv-U 是一个可以运行于Windows 95/98/2000/ME 和 Windows NT 4.0下的FTP服务器程序如图所示,
有了它,你的个人电脑就可以模拟为一个FTP服务器,也就是说,你所连接的网络中的计算机用户可以访问你的个人电脑,通过FTP协议(文件传输协议)复制、移动、删除你的电脑中的文件或文件夹,可以做一切权限所允许的事情。FTP协议规定了计算机之间的标准通讯方式,使所有不同类型,不同操作系统,不同格式的电脑之间得以互换文件。它可以用最简单的方式创建用户帐号,并且在硬盘空间上划分一定的区域用以存放文件,让用户以各种FTP客户端软件(如CuteFTP、WS_FTP等)上传或下载所需要的文件。
有许多FTP服务器和客户端软件可用于不同的系统中,Serv-U是用于运行MS-Windows 并且已安装了WinSock 版本 1.1 兼容 TCP/IP协议的个人电脑中的,这几乎包括了所有的Windows操作系统。
Serv-U由两大部分组成,引擎和用户界面。Serv-U引擎(ServUDaemon.exe)其实是一个常驻后台的程序,也是Serv-U整个软件的心脏部分,它负责处理来自各种FTP客户端软件的FTP命令,也是负责执行各种文件传送的软件。在运行Serv-U引擎也就ServUDaemon.exe
文件后,我们看不到任何的用户界面,它只是在后台运行,通常我们无法影响它,但在ServUAdmin.exe中我们可以停止和开始它。Serv-U引擎可以在任何Windows平台下作为一个本地系统服务来运行,系统服务随操作系统的启动而开始运行,而后我们就可以运行用户界面程序了。在Win NT/2000系统中,Serv-U会自动安装为一个系统服务,但在Win 9x/Me中,你需要在“服务器”面板中选择“自动开始”,才能让它转为系统服务。Serv-U用户界面(ServUAdmin.exe)也就是Serv-U管理员,它负责与Serv-U引擎之间的交互。它可以让用户配置 Serv-U,包括创建域、定义用户、并告诉服务器是否可以访问。启动Serv-U管理员最简单的办法就是直接点接系统栏的“U”形图标,当然,你也可以从开始菜单中运行它。
在此有必要把Serv-U中的一些重要的概念给大家讲清楚:每个正在运行的Serv-U引擎可以被用来运行多个“虚拟”的FTP服务器,在管理员程序中,每个“虚拟”的FTP服务器都称为“域”,因此,对于服务器来说,不得不建立多个域时是非常有用的。每个域都有各自
的“用户”、“组”和设置。一般说来,“设置向导”会在你第一次运行应用程序时设置好一个最初的域和用户帐号。服务器、域和用户之间的关系大家可以参考下表:
*Serv-U 服务器
*域 1
*用户帐号 1
*用户帐号 2
*用户帐号 3
*域 2
*用户帐号 1
*用户帐号 2
*域 3
*用户帐号 1
*用户帐号 1
这个表有点类似与Serv-U管理员中服务器、域和用户的排列。
Serv-U FTP Server 是试用软件,安装后三十天内,你可以作为“专业版本”使它,但试用期过后,你就只能作为免费的“个人版
本”使用了,只有基本功能了。
好了,说了这么多,还没到关键部分-如何自己来建立FTP服务器。下面我就一步一步来说明。
一、 安装原版软件和汉化补丁,这个过程就不多说了,想必没人不会的。
二、 建立第一个本地FTP服务器
安装完成后程序会自动运行,你也可以在菜单中选择运行。
1、 第一次运行程序,它会弹出设置向导窗口如图,
将会带你完成最初的设置,
2、 单击“下一步”,出现“显示菜单图像”的窗口,问你是否在菜单中显示小图像,看各人喜欢了;
3、 单击“下一步”,这个窗口是让你在本地第一次运行FTP服务器,只要“下一步”就行了。
4、 接下来要你输入你的IP地址如图,
如果你自己有服务器,有固定的IP,那就请输入IP地址,如果你只是在自己电脑上建立FTP,而且又是拨号用户,有的只是动态IP,没有固定IP,那这一步就省了,什么也不要填,Serv-U 会自动确定你的IP地址,“下一步”;
5、 在这儿要你输入你的域名,如图
如果你有的话,如:ftp.abc.com,没有的话,就随便填一个;
6、 “下一步”,询问你是否允许匿名访问如图
一般说来,匿名访问是以Anonymous为用户名称登录的,无需密码,当然如果你想成立一个会员区什么的,就应该选择“否”,不让随便什么人都可以登录,只有许可用户才行,在此我们填“是”;
7、 “下一步”,问你匿名用户登录到你的电脑时的目录,如图,
你可以自己指定一个硬盘上已存在的目录,如F:_temp_xyz;
8、 “下一步”,询问你是否要锁定该目录,锁定后,匿名登录的用户将只能认为你所指定的目录(F:_temp_xyz)是根目录,也就是说他只能访问这个目录下的文件和文件夹,这个目录之外就不能访问,对于匿名用户一般填“是”;
9、 “下一步”,询问你是否创建命名的帐号,也就是说可以指定用户以特定的帐号访问你的FTP,这对于办会员区可很有用哦,你可以对于每个人都创建一个帐号,每个帐号的权限不同,就可以不同程序地限制每个人的权利,方法将在后面讲到,这里选择“是”;
10、 “下一步”,请你填入所要建立的帐号的名称,如图,如:ldr,
11、 “下一步”,请输入密码,如:123,
12、 “下一步”,询问登录目录是什么,这一步与第7步一样,如:F:_temp
13、 “下一步”,询问你是否要锁定该目录,同第8步,这里选择“否”;
14、 接下来询问你这次创建的用户的管理员权限,如图,
有几项选择:无权限,组管理员,域管理员,只读管理员和系统管理员,每项的权限各不相同;这里选择“系统管理员”;
15、 最后一步,点击“完成”就OK了,你有什么需要修改的,可以点“上一步”,或者进入Serv-U管理员直接修改。至此,我们建立
了一个域ftp.abc.com,两个用户,一个Anonymous,一个ldr。
三、 既然我们已经建立好FTP服务器,那么我们就应该可以用FTP客户端软件来尝试登录。
怎么办呢?其实很简单,我们不用上网,就可以测试。我们知道,不上网时,本地机的IP地址默认就为127.0.0.1,FTP端口号为21。打开FTP客户端软件,我就用FlashFXP来说明,打开快速连接,填入相应内容,如图
然后连接,如图
可以看到,我左边窗格以Anonymous登录,右边窗格以ldr登录,由于是本地机,所以速度奇快,上网后,假如我要让你登录到我的电脑上,我只要把我的上网时的IP地址给你,你就可以匿名访问我的电脑了(注意不要开防火墙),是不是很方便?
四、Serv-U管理员中的各项设置
在设置完成后,将会进入Serv-U管理员的主界面,如图
左边窗格中显示各个栏目,右边窗格中显示各个栏目的具体选项,下面就大概讲一讲设置内容。
1、 在图中,我们可以人为地控制Serv-U引擎的运行或停止,记住,在Win 9x/Me 中,我们就要在此选择“系统服务”,才会运行
Serv-U引擎。
2、 “许可”,如果你花美元买了注册号,就可以在此输入。
3、 “设置”,这个设置是对于“本地服务器”来说的。“常规”设置中,如图
可以限制服务器的最大速度,可以拦截FXP(站点到站点传送),也可以限制用户的数量,这样不至于你的服务器被拖跨。“目录缓存”设置中,如图
允许你自己确定目录列表的个数以及超时时间,在Windows 95 和 NT下,目录列表默认设置为25,当缓存满了之后,新的请求将替换老的请求。“高级”设置中,如图
可以让你自己定义服务器、Socket、文件的上传和下载的各项设置。
4、 “活动”,在这里记录了用户的活动日志,已封锁的IP的活动日志,以及任务日志;任务日志中显示的就是你开始停止的各项操作记录,你可以点击右击,选择一此过滤文本,使其只显示你所想见的内容,如图
5、 “域”,这里包含了你一开始根据向导所建立的用户、设置、域等。“域--设置”中所设置的内容其实与第3步差不多,只是它更
加具体,可以对于每一个不同域定制。“域--活动”中记载了这个域下所有用户的活动情况。
6、 “域--组”,我们可以自己建立一些便于管理的组,然后把一类的用户归到一个组中。
7、 “域--用户”中,大家可以看到一开始我们建立的两个帐号,一个Anonymous,一个ldr。现在就帐号ldr来对其中的细节设置说明一下。
A、“帐号”栏,如图
对于一些不守规则的人,我们可以选择“禁用帐号”,虽然有帐号,但可以使用户一时间无法登录;你也可以设置让程序到达某个日期后自动删除某个帐号;下面几栏是这个帐号的基本信息,我们都可以在此更改,其中密码改过后并不显示,而是统一显示<>,特别要注意选项“锁定用户于主目录”,什么意思呢?大家应该碰到,每次我们登录到FTP服务器上后,在根目录下只显示“/”,选择这项选项后,就是这样,如果不选,会出现什么情况呢?你可以做一下试验,在根目录下将显示“/f:/temp/”,也就是说显示了你硬盘中的绝对
地址,这在某些情况下是很危险的,有不怀好意的高手,你就麻烦了!
你可以隐藏属性为隐藏的文件,可以限制同一IP的登录个数,是否允许用户更改密码(这需要客户端软件的支持),最大上传下载的速
度,超时时间以及空闲时间,你也可以限制最大用户数量,如20,说明同时只能有20个用户登录。
C、“目录访问”栏,如图
在此你可以控制用户对于文件目录的权限,对文件有读取、写入、删除、追加、执行等操作,对于文件夹有列表、创建、删除,以及是否继承子目录;如果觉得目录不够,你也可以添加可访问的目录。
D、“IP访问”栏,如图
在这里你可以规定某个IP是否可以访问你的FTP服务器,你可以拒绝它的访问,只要填上相应的IP地址,以后由这个IP的访问通通被拦下。
E、“上传/下载率”栏,如图
在这里你可以设置上传和下载之间的比值,控制好上传和下载之间的数据流量关系。
F、“配额”栏,如图
这里你可以为每个FTP用户设置磁盘空间,点击“计算当前”,可以知道当前目前下的所有空间大小,在“最大”一栏中填入你想要限制的容量。
最后有一点,改过设置后一定要点击右键,选择“应用”使设置生效才行,否则一切都白做了。
2、哪位大侠能帮小弟我解释解释下这段用Python创建一个简单服务器的程序,谢谢了,在线急等
用的是Flask的框架,中间的几句os.system('/home/ubuntu/Desktop/myproject/LightOnOff.cpp 7 1 ')不知道是干什么的,这个要专看LightOnOff.cpp的源码属。
3、如何写一个简单的http服务器
这是一个真实的HTTP请求的例子,其中每一行都以\r\n结尾。由于我们写的是简单的服务器,所以我们只关心其中的几行。
第一行称为请求行,GET是请求方法,表示获取资源,除此之外还有POST方法、PUT方法、HEAD方法、DELETE方法和OPTIONS方法等。由于我们写一个简单的服务器,所以暂时仅支
持GET方法。/是URI,表示客户希望访问的资源的URI。HTTP/1.1是HTTP协议的版本,此例中表示1.1版本。我们需要解析请求行,需要解析出方法字段、URI和HTTP协议版本。
第二行是Host字段,表示所请求的资源所在的主机名和端口号。
第三行User-Agent是客户的浏览器的类型,此例是运行在Ubuntu上的Firefox浏览器。
第四行Accept表示客户接受的资源的类型。
第四行Accept-Language表示客户接受的语言类型。
第五行Connection表示服务器在发送完客户请求的数据之后是否断开TCP连接。keep-alive表示不断开,close表示断开。
4、编写一个简单的程序,该程序使用数据报套接字实现简单的客户/服务器方式
linux,vb似乎达不到目的,用java写一个c/s程序.网上有很多关于这样的简单事例!
5、虽能告诉我服务器端最简单的java程序?
15.3 服务多个客户
JabberServer可以正常工作,但每次只能为一个客户程序提供服务。在典型的服务器中,我们希望同时能处理多个客户的请求。解决这个问题的关键就是多线程处理机制。而对于那些本身不支持多线程的语言,达到这个要求无疑是异常困难的。通过第14章的学习,大家已经知道Java已对多线程的处理进行了尽可能的简化。由于Java的线程处理方式非常直接,所以让服务器控制多名客户并不是件难事。
最基本的方法是在服务器(程序)里创建单个ServerSocket,并调用accept()来等候一个新连接。一旦accept()返回,我们就取得结果获得的Socket,并用它新建一个线程,令其只为那个特定的客户服务。然后再调用accept(),等候下一次新的连接请求。
对于下面这段服务器代码,大家可发现它与JabberServer.java例子非常相似,只是为一个特定的客户提供服务的所有操作都已移入一个独立的线程类中:
//: MultiJabberServer.java
// A server that uses multithreading to handle
// any number of clients.
import java.io.*;
import java.net.*;
class ServeOneJabber extends Thread {
private Socket socket;
private BufferedReader in;
private PrintWriter out;
public ServeOneJabber(Socket s)
throws IOException {
socket = s;
in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
// Enable auto-flush:
out =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
// If any of the above calls throw an
// exception, the caller is responsible for
// closing the socket. Otherwise the thread
// will close it.
start(); // Calls run()
}
public void run() {
try {
while (true) {
String str = in.readLine();
if (str.equals("END")) break;
System.out.println("Echoing: " + str);
out.println(str);
}
System.out.println("closing...");
} catch (IOException e) {
} finally {
try {
socket.close();
} catch(IOException e) {}
}
}
}
public class MultiJabberServer {
static final int PORT = 8080;
public static void main(String[] args)
throws IOException {
ServerSocket s = new ServerSocket(PORT);
System.out.println("Server Started");
try {
while(true) {
// Blocks until a connection occurs:
Socket socket = s.accept();
try {
new ServeOneJabber(socket);
} catch(IOException e) {
// If it fails, close the socket,
// otherwise the thread will close it:
socket.close();
}
}
} finally {
s.close();
}
}
} ///:~
每次有新客户请求建立一个连接时,ServeOneJabber线程都会取得由accept()在main()中生成的Socket对象。然后和往常一样,它创建一个BufferedReader,并用Socket自动刷新PrintWriter对象。最后,它调用Thread的特殊方法start(),令其进行线程的初始化,然后调用run()。这里采取的操作与前例是一样的:从套扫字读入某些东西,然后把它原样反馈回去,直到遇到一个特殊的"END"结束标志为止。
同样地,套接字的清除必须进行谨慎的设计。就目前这种情况来说,套接字是在ServeOneJabber外部创建的,所以清除工作可以“共享”。若ServeOneJabber构建器失败,那么只需向调用者“掷”出一个违例即可,然后由调用者负责线程的清除。但假如构建器成功,那么必须由ServeOneJabber对象负责线程的清除,这是在它的run()里进行的。
请注意MultiJabberServer有多么简单。和以前一样,我们创建一个ServerSocket,并调用accept()允许一个新连接的建立。但这一次,accept()的返回值(一个套接字)将传递给用于ServeOneJabber的构建器,由它创建一个新线程,并对那个连接进行控制。连接中断后,线程便可简单地消失。
如果ServerSocket创建失败,则再一次通过main()掷出违例。如果成功,则位于外层的try-finally代码块可以担保正确的清除。位于内层的try-catch块只负责防范ServeOneJabber构建器的失败;若构建器成功,则ServeOneJabber线程会将对应的套接字关掉。
为了证实服务器代码确实能为多名客户提供服务,下面这个程序将创建许多客户(使用线程),并同相同的服务器建立连接。每个线程的“存在时间”都是有限的。一旦到期,就留出空间以便创建一个新线程。允许创建的线程的最大数量是由final int maxthreads决定的。大家会注意到这个值非常关键,因为假如把它设得很大,线程便有可能耗尽资源,并产生不可预知的程序错误。
//: MultiJabberClient.java
// Client that tests the MultiJabberServer
// by starting up multiple clients.
import java.net.*;
import java.io.*;
class JabberClientThread extends Thread {
private Socket socket;
private BufferedReader in;
private PrintWriter out;
private static int counter = 0;
private int id = counter++;
private static int threadcount = 0;
public static int threadCount() {
return threadcount;
}
public JabberClientThread(InetAddress addr) {
System.out.println("Making client " + id);
threadcount++;
try {
socket =
new Socket(addr, MultiJabberServer.PORT);
} catch(IOException e) {
// If the creation of the socket fails,
// nothing needs to be cleaned up.
}
try {
in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));
// Enable auto-flush:
out =
new PrintWriter(
new BufferedWriter(
new OutputStreamWriter(
socket.getOutputStream())), true);
start();
} catch(IOException e) {
// The socket should be closed on any
// failures other than the socket
// constructor:
try {
socket.close();
} catch(IOException e2) {}
}
// Otherwise the socket will be closed by
// the run() method of the thread.
}
public void run() {
try {
for(int i = 0; i < 25; i++) {
out.println("Client " + id + ": " + i);
String str = in.readLine();
System.out.println(str);
}
out.println("END");
} catch(IOException e) {
} finally {
// Always close it:
try {
socket.close();
} catch(IOException e) {}
threadcount--; // Ending this thread
}
}
}
public class MultiJabberClient {
static final int MAX_THREADS = 40;
public static void main(String[] args)
throws IOException, InterruptedException {
InetAddress addr =
InetAddress.getByName(null);
while(true) {
if(JabberClientThread.threadCount()
< MAX_THREADS)
new JabberClientThread(addr);
Thread.currentThread().sleep(100);
}
}
} ///:~
JabberClientThread构建器获取一个InetAddress,并用它打开一个套接字。大家可能已看出了这样的一个套路:Socket肯定用于创建某种Reader以及/或者Writer(或者InputStream和/或OutputStream)对象,这是运用Socket的唯一方式(当然,我们可考虑编写一、两个类,令其自动完成这些操作,避免大量重复的代码编写工作)。同样地,start()执行线程的初始化,并调用run()。在这里,消息发送给服务器,而来自服务器的信息则在屏幕上回显出来。然而,线程的“存在时间”是有限的,最终都会结束。注意在套接字创建好以后,但在构建器完成之前,假若构建器失败,套接字会被清除。否则,为套接字调用close()的责任便落到了run()方法的头上。
threadcount跟踪计算目前存在的JabberClientThread对象的数量。它将作为构建器的一部分增值,并在run()退出时减值(run()退出意味着线程中止)。在MultiJabberClient.main()中,大家可以看到线程的数量会得到检查。若数量太多,则多余的暂时不创建。方法随后进入“休眠”状态。这样一来,一旦部分线程最后被中止,多作的那些线程就可以创建了。大家可试验一下逐渐增大MAX_THREADS,看看对于你使用的系统来说,建立多少线程(连接)才会使您的系统资源降低到危险程度。
6、请编写如下简单的SOCCKET服务器端程序~~~急求
private IPAddress myIp = IPAddress.Parse("127.0.0.1");
private IPEndPoint myServer;
private Socket socket;
private Socket accSocket;
private delegate void EnableTextCallBack();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)//建立监听
{
try
{
myIp = IPAddress.Parse("127.0.0.1");
}
catch (Exception ex)
{
MessageBox.Show("请输入正确的IP地址");
}
try
{
Thread thread = new Thread(new ThreadStart(accp));
thread.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void accp()
{
myServer = new IPEndPoint(myIp, Int32.Parse("192.168.0.8"));//目标地址
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(myServer);
socket.Listen(1024);
AppenTxt();
while (true)
{
accSocket = socket.Accept();
if (accSocket.Connected)
{
textBox5.AppendText("与客户建立连接");
Thread thread = new Thread(new ThreadStart(Round));
thread.Start();
}
}
}
private void Round()
{
while (true)
{
Byte[] rec = new Byte[64];
NetworkStream netStream = new NetworkStream(accSocket);
netStream.Read(rec, 0, rec.Length);
string recMessage = System.Text.Encoding.BigEndianUnicode.GetString(rec);
//textBox3.AppendText(recMessage + "
");
}
}
private void button3_Click(object sender, EventArgs e)
{
try
{
socket.Close();
textBox5.AppendText("主机" + textBox1.Text + "端口" + textBox2.Text + "停止监听..." + "
");
}
catch (Exception ex)
{
MessageBox.Show("监听尚未开始无效");
}
}
大体的思路就是这个,跟你贴了一段的代码,
socket编程,要先建立监听,然后持续监听
Good Luck! 希望能够帮助到你!
如果感觉能帮助到你,可以尽快采纳,谢谢!
7、易语言最简单的客户端服务器
服务器和客户端要分别在两个程序中,这是正常的虽然在一个程序中也可以。
一个程序中
.版本 2
.支持库 eAPI
.支持库 spec
.子程序 __启动窗口_创建完毕
客户1.连接 (取IP地址 (), 19730)
客户1.发送数据 (“123”)
.子程序 _服务器1_数据到达
调试输出 (到文本 (服务器1.取回数据 ()))
下载的直接就是源代码,不用担心有病毒
8、什么叫服务器???请简单点说
服务器就是个虚拟电脑,没有主机,使用的时候通过IP账号密码登录,然后打开之后和普通的电脑无异,但是胜在可以持续运行,不用关机,比如你有什么软件必须一直开着运行,那么服务器就是你的不二之选,或者你需要外地/国外的IP来使用,那么也可以登录服务器在服务器内操作
9、简单的HTTP Web服务器实现
可以使用开源的http服务器如:Apache HTTP 服务器。
10、求一个简单的java服务器程序
是TCP还是UDP ?
首先你的服务器和客户端都需要各自的收发程序 端口不能一样
tcp的话 先建立连接 服务器和客户端都启动接收程序 客户端发送消息 服务器判断 然后返回消息
然后客户端接收到消息 显示出来
udp的话 不需要建立连接 只需要端口和ip就好了(但是只管发,不会管是否收到) 其余的和tcp一样的
http://www.blogjava.net/wxb_nudt/archive/2007/11/01/157623.html 这个说的很详细 也有例子
如果只是想测试你的服务器程序的话 有这样的软件可以看到接收到的数据和发送自己需要的数据 发的话需要手动输入
http://www.ote.com/soft/25213.html 这个就可以