当前位置:首页 » 云服务器 » 如何在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再选择下一个选项;此时的选项将是调试模式而不是默认。 游戏模式可以用游戏中的作弊命令修改。但是不能破坏方块。

热点内容
在linuxpython 发布:2024-04-27 22:38:57 浏览:316
机顶盒密码是在哪里 发布:2024-04-27 22:32:47 浏览:158
名图买哪个配置值得买 发布:2024-04-27 22:32:36 浏览:878
比亚迪秦pro选哪个配置好 发布:2024-04-27 22:32:34 浏览:534
logn算法 发布:2024-04-27 21:58:36 浏览:596
11选五的简单算法 发布:2024-04-27 21:46:14 浏览:71
ebay图片上传 发布:2024-04-27 21:31:50 浏览:587
微信电脑登录显示服务器错误 发布:2024-04-27 20:58:08 浏览:135
压缩弹簧安装 发布:2024-04-27 20:35:43 浏览:371
淘宝视频无法上传视频 发布:2024-04-27 20:31:27 浏览:643