當前位置:首頁 » 雲伺服器 » 如何在java上添加伺服器地址

如何在java上添加伺服器地址

發布時間: 2023-01-30 04:45:27

⑴ 怎麼把寫好的java網站部署到伺服器上

一.下載

J2SDK下載
http://java.sun.com/j2se/1.4.2/download.html
下載版本是j2sdk-1_4_2_08

ECLIPSE下載
http://www.eclipse.org/downloads/index.php
下載版本是eclipse-SDK-3.0.2-win32

ECLIPSE 插件下載

中文包:
http://sunsite.informatik.rwth-aachen.de/eclipse/downloads/drops/L-3.0.1_Translations-200409161125/NLpack-eclipse-SDK-3.0.x-win32.zip

Tomcat插件Sysdeo Eclipse Tomcat Launcher plugin:
http://www.sysdeo.com/eclipse/tomcatPluginV3.zip

TOMCAT下載
http://jakarta.apache.org/site/downloads/downloads_tomcat-5.cgi
下載版本是jakarta-tomcat-5.0.28

二.安裝

1.先安裝j2sdk
我安裝路徑是:D:\Program Files\Java\j2sdk

2.再安裝eclipse
Eclipse是綠色軟體,不需要安裝,把下載回來的eclipse壓縮解壓就可以了
我安裝的路徑是:D:\Program Files\Java\eclipse

3.安裝tomcat
下載回來的是一安裝文件,按照安裝提示進行就可以了
我安裝的路徑是:D:\Program Files\Java\Tomcat

4.安裝eclipse插件
中文包
直接將壓縮包NLpack-eclipse-SDK-3.0.x-win32內features和plugins兩文件夾內的內容解壓到eclipse文件夾內同名文件夾就可以了。
Tomcat插件
將壓縮包tomcatPluginV3解壓,把plugins文件夾內的內容解壓到eclipse文件夾內同名文件夾就可以了。

三.環境配置

1.系統環境變數配置
右擊「我的電腦」->高級->環境變數,
設置JAVA_HOME變數指向其安裝的目錄「D:\Program Files\Java\j2sdk」;
TOMCAT_HOME變數指向其安裝的目錄「D:\Program Files\Java\Tomcat」;
PATH變數中含有「%JAVA_HOME%\bin;」;
CLASSPATH變數含有「%JAVA_HOME%\lib\tools.jar;」;

2.eclipse中java運行環境的配置
在eclipse主窗口中,「窗口」->首選項->java->已安裝的JRE,選我們已經安裝的j2sdk

3. 配置Sysdeo Tomcat 插件
在eclipse主窗口中,「窗口」->首選項->tomcat,tomcat version 選 version 5.x(我們安裝的版本),tomcat home 處填我們安裝tomcat的路徑,這里就是D:\Program Files\Java\Tomcat。
切換到Advanced選項,在tomcat base處再填我們安裝tomcat的路徑,這里就是D:\Program Files\Java\Tomcat。
切換到JVM Setting選項,確定jre是你已經安裝的j2sdk版本,我們這里選j2sdk。
切換到Tomcat Manger App,為管理界面增加一個用戶。
最後按應用按鈕,然後在確定。
檢查配置是否成功,只需在eclipse主窗口中,按tomcat運行按鈕,然後在瀏覽器里的地址欄里輸入http://localhost:8080,如果出現tomcat 的頁面,那就證明配置成功了。

四.編寫程序

1.創建一個Tomcat項目
右擊「包資源管理器」窗口中的空白處,新建->Tomcat Project, 在項目名中填寫項目名字,在這里我填tomcat_test,點擊「完成」即可。

2.創建一個JSP頁面
在包資源管理器中,右擊「tomcat_test」,新建->文件, 在文件名中填寫HelloWorld.jsp(擴展名不能缺),在文本編輯窗口輸入如下代碼:
<html>

<head>

</head>
<body>

<h1>Hello World</h1>

</body>
</html>

然後保存。

五.部署JSP頁面

這里的部署我使用比較簡單的方法:首先,把上述放在eclipse的workpalce目錄的tomcat_test目錄拷到tomcat目錄下的webapps目錄里,然後對conf目錄里的server.xml進行文本編輯,在</engin>前加入如下host元素:
<Host name="*.*.*.*" debug="0" appBase="webapps"

unpackWARs="true" autoDeploy="true">

</Host>

然後保存,接著啟動tomcat,那樣只要你在瀏覽器窗口中輸入http://*.*.*.*:8080/tomcat_test/HelloWorld.jsp瀏覽器就會顯示「Hello World」,這樣說明你的jsp頁面部署發布成功,別人就能在網上訪問你的頁面了。

(*.*.*.*是指安裝了tomcat伺服器的主機IP地址)

六.幾點說明

(1)選j2sdk而不是jre,是因為j2sdk除了有java的運行環境還有java程序所需要的類,而jre只有運行環境。

(2)由於軟體本身升級比較頻繁,經常需要重新設置使用的環境變數或者重新配置,例如把JDK版本從1.3升級到1.4,即JDK目錄名可能要從「j2sdk1.3」改為「j2sdk1.4」,如果是這樣的話,那麼eclipse可能會無法再啟動了(它要從環境變數中尋找JAVA_HOME變數,而JAVA_HOME變數值已經從「j2sdk1.3」改為「j2sdk1.4」了)。同理, jakarta-tomcat這個軟體升級比較頻繁,現在結合eclipse來使用Tomcat的,那麼每次Tomcat升級,可能都要在eclipse中重新設置一下Tomcat的安裝目錄。如果按照傳統的安裝方法,我們每次升級軟體都要進行設置或配置,這樣非常麻煩。對於此類問題,解決的方法很簡單,只要把默認的軟體安裝目錄名去掉版本號即可(如果擔心忘記版本號,只要在目錄中添加一個readme文件加以說明即可)。上述的安裝過程就使用了這種方法。

⑵ 如何用JAVA實現一個代理伺服器

代理伺服器的應用非常廣泛。比如,在企業網內部,它可以用來控制員工在工作時瀏覽的Internet內容,阻止員工訪問某些類型的內容或某些指定的網站。代理伺服器實際上扮演著瀏覽器和Web伺服器之間的中間人的角色,能夠對瀏覽器請求進行各種各樣的處理,能夠過濾廣告和Cookie,能夠預先提取Web頁面,使得瀏覽器訪問頁面的速度更快,等等。
一、基礎知識
不管以哪種方式應用代理伺服器,其監控HTTP傳輸的過程總是如下:
步驟一:內部的瀏覽器發送請求給代理伺服器。請求的第一行包含了目標URL。
步驟二:代理伺服器讀取該URL,並把請求轉發給合適的目標伺服器。
步驟三:代理伺服器接收來自Internet目標機器的應答,把應答轉發給合適的內部瀏覽器。

例如,假設有一個企業的雇員試圖訪問www.cn.ibm.com網站。如果沒有代理伺服器,雇員的瀏覽器打開的Socket通向運行這個網站的Web伺服器,從Web伺服器返回的數據也直接傳遞給雇員的瀏覽器。如果瀏覽器被配置成使用代理伺服器,則請求首先到達代理伺服器;隨後,代理伺服器從請求的第一行提取目標URL,打開一個通向www.cn.ibm.com的Socket。當www.cn.ibm.com返回應答時,代理伺服器把應答轉發給雇員的瀏覽器。
當然,代理伺服器並非只適用於企業環境。作為一個開發者,擁有一個自己的代理伺服器是一件很不錯的事情。例如,我們可以用代理伺服器來分析瀏覽器和Web伺服器的交互過程。測試和解決Web應用中存在的問題時,這種功能是很有用的。我們甚至還可以同時使用多個代理伺服器(大多數代理伺服器允許多個伺服器鏈接在一起使用)。例如,我們可以有一個企業的代理伺服器,再加上一個用java編寫的代理伺服器,用來調試應用程序。但應該注意的是,代理伺服器鏈上的每一個伺服器都會對性能產生一定的影響。
二、設計規劃
正如其名字所示,代理伺服器只不過是一種特殊的伺服器。和大多數伺服器一樣,如果要處理多個請求,代理伺服器應該使用線程。下面是一個代理伺服器的基本規劃:
等待來自客戶(Web瀏覽器)的請求。
啟動一個新的線程,以處理客戶連接請求。
讀取瀏覽器請求的第一行(該行內容包含了請求的目標URL)。
分析請求的第一行內容,得到目標伺服器的名字和埠。
打開一個通向目標伺服器(或下一個代理伺服器,如合適的話)的Socket。
把請求的第一行發送到輸出Socket。
把請求的剩餘部分發送到輸出Socket。
把目標Web伺服器返回的數據發送給發出請求的瀏覽器。

當然,如果考慮細節的話,情況會更復雜一些。實際上,這里主要有兩個問題要考慮:第一,從Socket按行讀取數據最適合進一步處理,但這會產生性能瓶頸;第二,兩個Socket之間的連接必需高效。有幾種方法可以實現這兩個目標,但每一種方法都有各自的代價。例如,如果要在數據進入的時候進行過濾,這些數據最好按行讀取;然而,大多數時候,當數據到達代理伺服器時,立即把它轉發出去更適合高效這一要求。另外,數據的發送和接收也可以使用多個獨立的線程,但大量地創建和拆除線程也會帶來性能問題。因此,對於每一個請求,我們將用一個線程處理數據的接收和發送,同時在數據到達代理伺服器時,盡可能快速地把它轉發出去。
三、實例
在用java編寫這個代理伺服器的過程中,注意可重用性是很重要的。因為這樣的話,當我們想要在另一個工程中以不同的方式處理瀏覽器請求時,可以方便地重用該代理伺服器。當然,我們必須注意靈活性和效率之間的平衡。
圖一顯示了本文代理伺服器實例(HttpProxy.java)的輸出界面,當瀏覽器訪問http://www-900.ibm.com/cn/時,代理伺服器向默認日誌設備(即標准輸出設備屏幕)輸出瀏覽器請求的URL。圖二顯示了SubHttpProxy的輸出。SubHttpProxy是HttpProxy的一個簡單擴展。
圖一

圖二

為了構造代理伺服器,我從Thread基類派生出了HttpProxy類(文章正文中出現的代碼是該類的一些片斷,完整的代碼請從本文最後下載)。HttpProxy類包含了一些用來定製代理伺服器行為的屬性,參見Listing 1和表一。
【Listing 1】
/*************************************
* 一個基礎的代理伺服器類
*************************************
*/
import java.net.*;
import java.io.*;
public class HttpProxy extends Thread {
static public int CONNECT_RETRIES=5;
static public int CONNECT_PAUSE=5;
static public int TIME-OUT=50;
static public int BUFSIZ=1024;
static public boolean logging = false;
static public OutputStream log=null;
// 傳入數據用的Socket
protected Socket socket;
// 上級代理伺服器,可選
static private String parent=null;
static private int parentPort=-1;
static public void setParentProxy(String name, int pport) {
parent=name;
parentPort=pport;
}
// 在給定Socket上創建一個代理線程。
public HttpProxy(Socket s) { socket=s; start(); }
public void writeLog(int c, boolean browser) throws IOException {
log.write(c);
}
public void writeLog(byte[] bytes,int offset,
int len, boolean browser) throws IOException {
for (int i=0;i<len;i++) writeLog((int)bytes[offset+i],browser);
}
// 默認情況下,日誌信息輸出到
// 標准輸出設備,
// 派生類可以覆蓋它
public String processHostName(String url, String host, int port, Socket sock) {
java.text.DateFormat cal=java.text.DateFormat.getDateTimeInstance();
System.out.println(cal.format(new java.util.Date()) + " - " +
url + " " + sock.getInetAddress()+"<BR>");
return host;
}

表一
變數/方法 說明
CONNECT_RETRIES 在放棄之前嘗試連接遠程主機的次數。
CONNECT_PAUSE 在兩次連接嘗試之間的暫停時間。
TIME-OUT 等待Socket輸入的等待時間。
BUFSIZ Socket輸入的緩沖大小。
logging 是否要求代理伺服器在日誌中記錄所有已傳輸的數據(true表示「是」)。
log 一個OutputStream對象,默認日誌常式將向該OutputStream對象輸出日誌信息。
setParentProxy 用來把一個代理伺服器鏈接到另一個代理伺服器(需要指定另一個伺服器的名稱和埠)。

當代理伺服器連接到Web伺服器之後,我用一個簡單的循環在兩個Socket之間傳遞數據。這里可能出現一個問題,即如果沒有可操作的數據,調用read方法可能導致程序阻塞,從而掛起程序。為防止出現這個問題,我用setSoTimeout方法設置了Socket的超時時間(參見Listing 2)。這樣,如果某個Socket不可用,另一個仍舊有機會進行處理,我不必創建一個新的線程。
【Listing 2】
// 執行操作的線程
public void run() {
String line;
String host;
int port=80;
Socket outbound=null;
try {
socket.setSoTimeout(TIMEOUT);
InputStream is=socket.getInputStream();
OutputStream os=null;
try {
// 獲取請求行的內容
line="";
host="";
int state=0;
boolean space;
while (true) {
int c=is.read();
if (c==-1) break;
if (logging) writeLog(c,true);
space=Character.isWhitespace((char)c);
switch (state) {
case 0:
if (space) continue;
state=1;
case 1:
if (space) {
state=2;
continue;
}
line=line+(char)c;
break;
case 2:
if (space) continue; // 跳過多個空白字元
state=3;
case 3:
if (space) {
state=4;
// 只分析主機名稱部分
String host0=host;
int n;
n=host.indexOf("//");
if (n!=-1) host=host.substring(n+2);
n=host.indexOf('/');
if (n!=-1) host=host.substring(0,n);
// 分析可能存在的埠號
n=host.indexOf(":");
if (n!=-1) {
port=Integer.parseInt(host.substring(n+1));
host=host.substring(0,n);
}
host=processHostName(host0,host,port,socket);
if (parent!=null) {
host=parent;
port=parentPort;
}
int retry=CONNECT_RETRIES;
while (retry--!=0) {
try {
outbound=new Socket(host,port);
break;
} catch (Exception e) { }
// 等待
Thread.sleep(CONNECT_PAUSE);
}
if (outbound==null) break;
outbound.setSoTimeout(TIMEOUT);
os=outbound.getOutputStream();
os.write(line.getBytes());
os.write(' ');
os.write(host0.getBytes());
os.write(' ');
pipe(is,outbound.getInputStream(),os,socket.getOutputStream());
break;
}
host=host+(char)c;
break;
}
}
}
catch (IOException e) { }
} catch (Exception e) { }
finally {
try { socket.close();} catch (Exception e1) {}
try { outbound.close();} catch (Exception e2) {}
}
}

和所有線程對象一樣,HttpProxy類的主要工作在run方法內完成(見Listing 2)。run方法實現了一個簡單的狀態機,從Web瀏覽器每次一個讀取字元,持續這個過程直至有足夠的信息找出目標Web伺服器。然後,run打開一個通向該Web伺服器的Socket(如果有多個代理伺服器被鏈接在一起,則run方法打開一個通向鏈裡面下一個代理伺服器的Socket)。打開Socket之後,run先把部分的請求寫入Socket,然後調用pipe方法。pipe方法直接在兩個Socket之間以最快的速度執行讀寫操作。
如果數據規模很大,另外創建一個線程可能具有更高的效率;然而,當數據規模較小時,創建新線程所需要的開銷會抵消它帶來的好處。
Listing 3顯示了一個很簡單的main方法,可以用來測試HttpProxy類。大部分的工作由一個靜態的startProxy方法完成(見Listing 4)。這個方法用到了一種特殊的技術,允許一個靜態成員創建HttpProxy類(或HttpProxy類的子類)的實例。它的基本思想是:把一個Class對象傳遞給startProxy類;然後,startProxy方法利用映像API(Reflection API)和getDeclaredConstructor方法確定該Class對象的哪一個構造函數接受一個Socket參數;最後,startProxy方法調用newInstance方法創建該Class對象。
【Listing 3】
// 測試用的簡單main方法
static public void main(String args[]) {
System.out.println("在埠808啟動代理伺服器\n");
HttpProxy.log=System.out;
HttpProxy.logging=false;
HttpProxy.startProxy(808,HttpProxy.class);
}
}

【Listing 4】
static public void startProxy(int port,Class clobj) {
ServerSocket ssock;
Socket sock;
try {
ssock=new ServerSocket(port);
while (true) {
Class [] sarg = new Class[1];
Object [] arg= new Object[1];
sarg[0]=Socket.class;
try {
java.lang.reflect.Constructor cons = clobj.getDeclaredConstructor(sarg);
arg[0]=ssock.accept();
cons.newInstance(arg); // 創建HttpProxy或其派生類的實例
} catch (Exception e) {
Socket esock = (Socket)arg[0];
try { esock.close(); } catch (Exception ec) {}
}
}
} catch (IOException e) {
}
}

利用這種技術,我們可以在不創建startProxy方法定製版本的情況下,擴展HttpProxy類。要得到給定類的Class對象,只需在正常的名字後面加上.class(如果有某個對象的一個實例,則代之以調用getClass方法)。由於我們把Class對象傳遞給了startProxy方法,所以創建HttpProxy的派生類時,就不必再特意去修改startProxy。(下載代碼中包含了一個派生得到的簡單代理伺服器)。
結束語
利用派生類定製或調整代理伺服器的行為有兩種途徑:修改主機的名字,或者捕獲所有通過代理伺服器的數據。processHostName方法允許代理伺服器分析和修改主機名字。如果啟用了日誌記錄,代理伺服器為每一個通過伺服器的字元調用writeLog方法。如何處理這些信息完全由我們自己決定——可以把它寫入日誌文件,可以把它輸出到控制台,或進行任何其他滿足我們要求的處理。writeLog輸出中的一個Boolean標記指示出數據是來自瀏覽器還是Web主機。
和許多工具一樣,代理伺服器本身並不存在好或者壞的問題,關鍵在於如何使用它們。代理伺服器可能被用於侵犯隱私,但也可以阻隔偷窺者和保護網路。即使代理伺服器和瀏覽器不在同一台機器上,我也樂意把代理伺服器看成是一種擴展瀏覽器功能的途徑。例如,在把數據發送給瀏覽器之前,可以用代理伺服器壓縮數據;未來的代理伺服器甚至還可能把頁面從一種語言翻譯成另一種語言……可能性永無止境。

⑶ Java 中怎樣在程序中設置代理伺服器

importjava.io.BufferedReader;
importjava.io.InputStreamReader;
importjava.net.Authenticator;
importjava.net.HttpURLConnection;
importjava.net.InetSocketAddress;
importjava.net.PasswordAuthentication;
importjava.net.Proxy;
importjava.net.URL;

publicclassProxyDemo2{
publicstaticvoidmain(String[]args)throwsException{
URLurl=newURL("http://www.3lai8.com");
///創建代理伺服器
InetSocketAddressaddr=newInetSocketAddress("192.168.0.254",8080);
//Proxyproxy=newProxy(Proxy.Type.SOCKS,addr);//Socket代理
Proxyproxy=newProxy(Proxy.Type.HTTP,addr);//http代理
Authenticator.setDefault(newMyAuthenticator("username","password"));//設置代理的用戶和密碼
HttpURLConnectionconnection=(HttpURLConnection)url.openConnection(proxy);//設置代理訪問
InputStreamReaderin=newInputStreamReader(connection.getInputStream());
BufferedReaderreader=newBufferedReader(in);
while(true){
Strings=reader.readLine();
if(s!=null){
System.out.println(s);
}
}
}

{
privateStringuser="";
privateStringpassword="";

publicMyAuthenticator(Stringuser,Stringpassword){
this.user=user;
this.password=password;
}

(){
(user,password.toCharArray());
}
}

}

⑷ 如何用java 5分鍾實現一個最簡單的mysql代理伺服器

public class MysqlProxyServer {
private static final Logger logger = LoggerFactory.getLogger(MysqlProxyServer.class);

public static void main(String[] args) {
Vertx.vertx().deployVerticle(new MysqlProxyServerVerticle());
}

public static class MysqlProxyServerVerticle extends AbstractVerticle {
private final int port = 3306;
private final String mysqlHost = "10.10.0.6";
@Override
public void start() throws Exception {
NetServer netServer = vertx.createNetServer();//創建代理伺服器
NetClient netClient = vertx.createNetClient();//創建連接mysql客戶端
netServer.connectHandler(socket -> netClient.connect(port, mysqlHost, result -> {
//響應來自客戶端的連接請求,成功之後,在建立一個與目標mysql伺服器的連接
if (result.succeeded()) {
//與目標mysql伺服器成功連接連接之後,創造一個MysqlProxyConnection對象,並執行代理方法
new MysqlProxyConnection(socket, result.result()).proxy();
} else {
logger.error(result.cause().getMessage(), result.cause());
socket.close();
}
})).listen(port, listenResult -> {//代理伺服器的監聽埠
if (listenResult.succeeded()) {
//成功啟動代理伺服器
logger.info("Mysql proxy server start up.");
} else {
//啟動代理伺服器失敗
logger.error("Mysql proxy exit. because: " + listenResult.cause().getMessage(), listenResult.cause());
System.exit(1);
}
});
}
}

public static class MysqlProxyConnection {
private final NetSocket clientSocket;
private final NetSocket serverSocket;

public MysqlProxyConnection(NetSocket clientSocket, NetSocket serverSocket) {
this.clientSocket = clientSocket;
this.serverSocket = serverSocket;
}

private void proxy() {
//當代理與mysql伺服器連接關閉時,關閉client與代理的連接
serverSocket.closeHandler(v -> clientSocket.close());
//反之亦然
clientSocket.closeHandler(v -> serverSocket.close());
//不管那端的連接出現異常時,關閉兩端的連接
serverSocket.exceptionHandler(e -> {
logger.error(e.getMessage(), e);
close();
});
clientSocket.exceptionHandler(e -> {
logger.error(e.getMessage(), e);
close();
});
//當收到來自客戶端的數據包時,轉發給mysql目標伺服器
clientSocket.handler(buffer -> serverSocket.write(buffer));
//當收到來自mysql目標伺服器的數據包時,轉發給客戶端
serverSocket.handler(buffer -> clientSocket.write(buffer));
}

private void close() {
clientSocket.close();
serverSocket.close();
}
}
}
測試一下
try {
Class.forName(name);//指定連接類型
Connection conn = DriverManager.getConnection(url, user, password);//url為代理伺服器的地址
PreparedStatement pst = conn.prepareStatement("select * from test;");//准備執行語句
ResultSet resultSet = pst.executeQuery();
while (resultSet.next()) {
System.out.println(resultSet.getLong(1) + ": " + resultSet.getString(2));
}
} catch (Exception e) {
e.printStackTrace();
}

⑸ 如何在本機上利用java實現smtp郵件伺服器

1.修改<postmaster>localhost</postmaster>,改成你自己的伺服器域名,比如:<postmaster>support@</postmaster>
2.修改這些,也是改成自己的
<servernames autodetect="false" autodetectIP="false">
<servername></servername>
</servernames>
3.修改dns server,這是為了可以發外網郵件,查看DNS地址使用ipconfig/all,然後在配置文件中dnsserver節點下加入server地址.

⑹ 怎麼用java代碼連接到伺服器

首先就肯定要知道ServerSocket,服務端的服務埠以及伺服器的地址。
然後再用 Socket socket=new Socket(port,address);
最後,如果你需要接收數據之類的,就用socket.getInputStream(),發送數據用socket.getOutputStream()

⑺ 如何用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命令用於接收多個文件。
?


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.");

我的世界java離線伺服器地址

【聯機方法一】
1.將你電腦盤中的《我的世界》文件或著安裝包發送一份給聯機夥伴,令其安裝
2.JAVA是游戲運行的必備,位數根據自己的電腦系統而定,32就裝32,64就裝64,避免游戲經常出現報錯問題。
3.安裝完成後,通過某一台電腦進入游戲的「單人模式」,隨意創建一個世界,並進入。
我的世界怎麼聯機
4.記得記住3步驟的那台電腦的ip。可右鍵點擊網路→屬性→更改配置→本地連接→右鍵狀態→詳細信息→IP地址(win7)
5.在之前新建的單人模式游戲中按Esc鍵,點擊「對區域網開放」
我的世界聯機方法
6.點擊「創建一個區域網世界」,在屏幕上就會提示「本地游戲已在XXX埠上開啟」,記住屏幕提示的埠號(不同游戲版本提示有所不同)
我的世界聯機教程
7.在其他電腦上運行游戲,選擇多人模式,多人模式中就會出現一個「隨便創建一個世界」的游戲!若你的版本與漫漫看小編的版本不一樣,且未自動找到「隨便創建一個世界」,則點擊下方的「添加伺服器」
我的世界怎麼聯機
8.在伺服器地址中輸入上面我們記住的IP地址,以及屏幕提示的埠號,點擊「完成」,最後點擊加入伺服器,進入到游戲世紀中,聯機成功!
我的世界聯機方法
【聯機方式二】
一、內網聯機
首先你需要考慮是否開啟作弊,作弊的好處多多,以下一作弊模式為例。
我的世界聯機方法
2.創造一個世界,點擊對區域網開放
註:若第1步開啟了作弊,你既是OP(管理員),可以控制所有人,此處作弊開關意思是指OP任命,開了進來的玩家就都是OP,關了僅有你是OP。(原版不能設置或取消OP)
3.創造後,左下角會顯示您的內網IP。要聯機的玩機點擊多人模式即可。
註:因為是內網,所以一定范圍內的玩家都會自動搜索到這個游戲。如果沒有可以通過手動添加內網IP來找到。
二.外網聯機(必須有路由器)
1.建立一個伺服器後,左下角顯示了您的內網IP。
2.登錄您的路由器設置平台,找到轉發規則(切記自己的MAC地址知道就好)
3.添加新條目(埠號必須輸入您建立伺服器後);
4.將IP地址輸入到屏幕左下角的那個內網IP,點擊保存
註:不同品牌可能網址不同,請參考說明書或者路由器機體。
5.網路IP,記下你的IP
6.其他人要進入,只需輸入你的外網IP後加埠號,如124.124.124:1277(埠號),但要切記莫要開啟輸入法,放置帶入符號,導致失敗
註:每次新創立多人游戲,系統提供的埠都不同,所以每次您都要去伺服器設置中更改埠號。
《我的世界》模式很多,接下來咱們來稍微了解下幾種主要模式吧:
創造模式(Creative Mode)
最初的Classic版本的游戲方式(之後的版本則是以生存模式為游戲方式),在Beta 1.8中獨立出現。方塊是無限的,無需擔心自己的安全,而且可以飛行。但和免費版本不同,創造模式擁有收費版本所有的方塊和物品,動物和怪物,還有完整的游戲功能。啟用作弊時可用指令/gamemode 1或者/gamemode c(亦可在命令方塊輸入此指令)變更為創造模式。此模式只能掉入虛空或輸入指令/kill才能死亡。
生存模式(Survival Mode)
該模式要求玩家通過建築和製作各種工具來讓自己生存下去。物品欄系統限制了玩家攜帶方塊的數量,並且普通方塊都得先通過開採的方式獲得,而不是像免費版本那樣無限供應方塊。用不同的方塊可以製成各種物品,如箱子,熔爐等。同時也能夠通過種植農作物和捕獵動物來獲取其它資源。除了物品欄外,玩家還有生命條,飢餓條和經驗條(PE版本中還沒有飢餓條和經驗條)。吃下食物能恢復一定的飢餓值,在接近飢餓值達到9格時狀態玩家能緩慢回復生命值,而從高處落下或遭怪物攻擊則會降低生命值。一旦死亡,玩家將在進入游戲世界的出生點或者自己的床邊復活並丟失所有物品,當然這些物品可以趁其在五分鍾內還未消失的死亡地點找回。啟用作弊時輸入指令/gamemode 0可從其他模式變為生存模式。
極限模式(Hardcore Mode)
相當於生存模式的變體。在Beta 1.9 Pre-Release 2被引入游戲,於Minecraft 1.0正式使用。游戲功能與生存模式相同,只是在此模式中難度將固定於困難難度,而且僅有一次生命,你不可以用指令來切換到極限模式,你只能修改游戲的存檔,當你在極限模式的時候用/gamemode 1切換到創造模式時,只要死亡就會刪除存檔,其他模式同理(其實如果死亡時直接退出遊戲,存檔文件是不會刪除的),並會有你的生存分數出現在死亡畫面。
旁觀者模式(Spectator Mode)
游戲人工風景
在1.8版本中,使用指令/gamemode 3或者使用/gamemode sp(亦可在命令方塊輸入此指令)變更為旁觀者模式。
在此模式中:
只有旁觀者才能看見旁觀者。
旁觀者可以查看道具欄等,但是不能使用、放置方塊。
旁觀者可以穿過任何實體或方塊而不與之發生操作。
旁觀者可以點擊實體來從它們的視角觀察,但不能與方塊交互。
旁觀者在進入蜘蛛的視角時會出現八個視線,模擬八個眼睛。
旁觀者進入爬行者視角時視線背景變為綠色。
旁觀者進入末影人視角時顏色會有反色效果。
調試模式(Debug Mode)
調試模式是一種世界類型。在創建世界時按住shift點擊地圖類型,即可。在單個的世界中包含所有狀態和數據值的一般方塊,在y=70的高度以網格的方式排列,並在y=60的高度有一層屏障。 這個世界類型用於測試方塊的模型,狀態和材質。因此該類型不但對Mojang,對資源包製作者也很有幫助。 要選擇這個類型,需要在選到自定義模式後按住Shift再選擇下一個選項;此時的選項將是調試模式而不是默認。 游戲模式可以用游戲中的作弊命令修改。但是不能破壞方塊。

熱點內容
編程畫櫻花 發布:2024-03-29 02:11:24 瀏覽:472
騰訊雲伺服器1mb老掉線 發布:2024-03-29 01:56:11 瀏覽:214
執行sql語句的存儲過程 發布:2024-03-29 01:52:37 瀏覽:696
婚紗攝影腳本 發布:2024-03-29 01:47:40 瀏覽:900
我的世界伺服器咋開外掛 發布:2024-03-29 01:07:45 瀏覽:455
sql寫報表 發布:2024-03-29 01:03:23 瀏覽:305
家用伺服器怎麼選 發布:2024-03-29 00:49:18 瀏覽:401
Ap6510dn如何配置 發布:2024-03-29 00:38:47 瀏覽:333
安卓和蘋果哪個更佔用內存 發布:2024-03-29 00:37:02 瀏覽:424
編譯錯誤算bug嗎 發布:2024-03-29 00:23:03 瀏覽:34