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 這個就可以