java网络程序
㈠ 简述java程序的开发过程
Java程序开发步骤是什么?具体操作步骤如下:
第一步:安装JDK。
要下载Oracle公司的JDK可以网络“JDK”进入Oracle公司的JDK下载页面,选择自己电脑系统的对应版本即可。
第二步:配置Windows上JDK的变量环境。
JAVA_HOME
先设置这个系统变量名称,变量值为JDK在电脑上的安装路径:C:ProgramFilesJavajdk1.8.0_20。创建好后则可以利用%JAVA_HOME%作为JDK安装目录的统一引用路径。
Path
PATH属性已存在,可直接编辑,在原来变量后追加:;%JAVA_HOME%in;%JAVA_HOME%jrein。
CLASSPATH
设置系统变量名为:CLASSPATH?变量值为:.;%JAVA_HOME%libdt.jar;%JAVA_HOME%lib ools.jar。
注意变量值字符串前面有一个"."表示当前目录,设置CLASSPATH?的目的,在于告诉Java执行环境,在哪些目录下可以找到所要执行的Java程序所需要的类或者包。
第三步:下载安装Eclipse(已上传附件,电脑打开可下载)?。
Eclipse为Java应用程序及Android开发的IDE(集成开发环境)。Eclipse不需要安装,下载后把解压包解压后,剪切eclipse文件夹到你想安装的地方,打开时设置工作目录即可。
第四步:下载安装AndroidSDK。
配置了JDK变量环境,安装好了Eclipse,这个时候如果只是开发普通的JAVA应用程序,那么Java的开发环境已经准备好了。要通过Eclipse来开发Android应用程序,那么需要下载AndroidSDK(SoftwareDevelopmentKit)和在Eclipse安装ADT插件,这个插件能让Eclipse和AndroidSDK关联起来。
第五步:为Eclipse安装ADT插件。
前面已经配置好了java的开发环境,安装了开发Android的IDE,下载安装了AndroidSDK,但是Eclipse还没有和AndroidSDK进行关联,也就是它们现在是互相独立的,就好比枪和子弹分开了。为了使得Android应用的创建,运行和调试更加方便快捷,Android的开发团队专门针对EclipseIDE定制了一个插件:AndroidDevelopmentTools(ADT)。
简述JAVA程序的编辑编译和运行过程第一步(编译):创建完源文件之后,程序会先被编译为.class文件。Java编译一个类时,如果这个类所依赖的类还没有被编译,编译器就会先编译这个被依赖的类,然后引用,否则直接引用,这个有点象make。
如果java编译器在指定目录下找不到该类所其依赖的类的.class文件或者.java源文件的话,编译器话报“cantfindsymbol”的错误。
第二步(运行):java类运行的过程大概可分为两个过程:1、类的加载2、类的执行。需要说明的是:JVM主要在程序第一次主动使用类的时候,才会去加载该类。也就是说,JVM并不是在一开始就把一个程序就所有的类都加载到内存中,而是到不得不用的时候才把它加载进来,而且只加载一次。
特别说明:java类中所有public和protected的实例方法都采用动态绑定机制,所有私有方法、静态方法、构造器及初始化方法clinit都是采用静态绑定机制。而使用动态绑定机制的时候会用到方法表,静态绑定时并不会用到。
(1)java网络程序扩展阅读:
Java整个编译以及运行的过程相当繁琐,本文通过一个简单的程序来简单的说明整个流程。
Java代码编译:是由Java源码编译器来完成;
Java字节码的执行:是由JVM执行引擎来完成
Java程序从源文件创建到程序运行要经过两大步骤:
1、源文件由编译器编译成字节码(ByteCode)
2、字节码由java虚拟机解释运行。因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言("semi-interpreted"language)。
简述Java应用程序的开发流程
分为网页和桌面的应用开发
网页或者桌面开发流程
项目启动1)、项目组成立(公司成员、客户成员)
2)、制定项目预期目标
3)、制定项目计划周期
4)、建立好项目组成员沟通机制
2、需求调研
1)、创建调研计划、协调调研时间
2)、收集客户资料,获取客户需求所有的资料都需要保留一份,资料中存疑的需要及时询问
3)、编写需求文档重点描述出客户的业务流程和性能要求。采用Word、Excel、Rose等形式。
4)、需求变更记录
5)、确定开发环境和运行环境
6)、扩展性要求
7)、与旧系统的接驳要求。
8)、估算出项目工作量本阶段需要一套需求管理系统来进行需求的管理。本阶段的需求文档也是用户测试的依据。
3、系统设计/详细设计一个系统可以分为基础平台和应用模块两部分。
1)、选择基础平台,无论是采用第三方平台还是自行开发平台,都需要深入了解,查看是否符合要求。
2)、应用模块设计(针对业务流程)
3)、中间件的采用或自行开发,需要深入了解。
4)、用户界面的设计如果用户界面设计完毕并确认,即可初步写出用户使用手册、管理员使用手册。
5)、变更记录本阶段的系统设计是集成测试的依据。
4、程序开发创建开发任务计划表、开发计划日程表
1)、优先编写测试用例
2)、按照编码规范编写代码
3)、按照文档注释规范注释以上形成开发文档。本阶段需要一套版本管理系统。本阶段的测试用例也是单元测试的依据。如果能做到,最好每日构建。
5、测试本阶段需要一套Bug管理系统,形成需求、设计、开发、测试互动。
1)、编写测试计划和测试方案
2)、功能测试单元测试、集成测试
3)、性能测试集成测试、压力测试如果能做到,最好能进行自动化测试。如果能做到,做分析统计工作。最后形成测试报告。
6、试用、培训、维护本阶段需要解决:
1)、解决异地修改和公司修改的同步问题。
2)、用户测试中的Bug修改问题,按照级别分为a)、程序Bugb)、设计变更c)、需求变更尽量按照a
b
c的顺序来进行修改,尽量避免b、c级的修改。最后形成安装手册、维护记录。
开发JAVA应用程序有哪些步骤?需要以下步骤:
定义问题:主要是指“想开发什么样的程序”、“这个程序用来解决什么问题”。满足目标客户的要求是最重要的。
2.是否具有可行性:要对这个程序是否具有实用性、利益性、以及对技术和法律方面的要求,都进行考虑。
3.需求分析。弄清用户对软件系统的全部需求,编写需求规格说明书和初步的用户手册,提交评审。
4.开发阶段:设计、实现、测试,是开发时最为重要的三个步骤。这三个步骤需要把程序员自己的理解及想法,和客户的需求都要得到体现。
5.对程序的维护:维护相当于售后服务,这个非常重要。因为程序在运营时,可能遇到各种各样的突发事件,面对这些突发情况,必须要进行紧急的处理。维护包括四个方面"改正性维护、适应性维护、完善性维护、预防性维护"。
Java,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Javaapplet)显示了Java的魅力:跨平台、动态的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现均支持Javaapplet。
ava分为三个体系JavaSE(Java2PlatformStandardEdition,java平台标准版),JavaEE(Java2Platform,EnterpriseEdition,java平台企业版),JavaME(Java2PlatformMicroEdition,java平台微型版)。
㈡ 我要一份用java网络编程写的点对点的两人聊天程序(TCP和UDP)
Server端:
import java.io.*;
import java.net.*;
import java.applet.Applet;
public class TalkServer{
public static void main(String args[]) {
try{
ServerSocket server=null;
try{
server=new ServerSocket(4700);
}catch(Exception e) {
System.out.println("can not listen to:"+e);
}
Socket socket=null;
try{
socket=server.accept();
}catch(Exception e) {
System.out.println("Error."+e);
}
String line;
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Client:"+is.readLine());
line=sin.readLine();
while(!line.equals("bye")){
os.println(line);
os.flush();
System.out.println("Server:"+line);
System.out.println("Client:"+is.readLine());
line=sin.readLine();
}
os.close();
is.close();
socket.close();
server.close();
}catch(Exception e){
System.out.println("Error:"+e);
}
}
}
Client端:
import java.io.*;
import java.net.*;
public class TalkClient {
public static void main(String args[]) {
try{
Socket socket=new Socket("127.0.0.1",4700);
BufferedReader sin=new BufferedReader(new InputStreamReader(System.in));
PrintWriter os=new PrintWriter(socket.getOutputStream());
BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInputStream()));
String readline;
readline=sin.readLine(); //从系统标准输入读入一字符串
while(!readline.equals("bye")){
os.println(readline);
os.flush();
System.out.println("Client:"+readline);
System.out.println("Server:"+is.readLine());
readline=sin.readLine(); //从系统标准输入读入一字符串
}
os.close(); //关闭Socket输出流
is.close(); //关闭Socket输入流
socket.close(); //关闭Socket
}catch(Exception e) {
System.out.println("Error"+e); //出错,则打印出错信息
}
}
}
㈢ 怎么用java程序连接NTP服务器
Java软件包内在支持的网络协议为TCP/IP,也是当今最流行的广域网/局域网协议。Java有关网络的类及接口定义在java.net包中。客户端软件通常使用 java.net包中的核心类Socket与服务器的某个端口建立连接,而服务器程序不同于客户机,它需要初始化一个端口进行监听,遇到连接呼叫,才与相应的客户机建立连接。Java.net包的ServerSocket类包含了编写服务器系统所需的一切。下面给出ServerSocket类的部分定义。
public class ServerSocket {
public ServerSocket(int port)
throws IOException ;
public Socket accept() throws IOException ;
public InetAddress getInetAddress() ;
public int getLocalPort() ;
public void close() throws IOException ;
public synchronized void setSoTimeout
(int timeout) throws SocketException ;
public synchronized int
getSoTimeout() throws IOException ;
}
ServerSocket 构造器是服务器程序运行的基础,它将参数port指定的端口初始化作为该服务器的端口,监听客户机连接请求。Port的范围是0到65536,但0到 1023是标准Internet协议保留端口,而且在Unix主机上,这些端口只有root用户可以使用。一般自定义的端口号在8000到16000之间。仅初始化了ServerSocket还是远远不够的,它没有同客户机交互的套接字(Socket),因此需要调用该类的accept方法接受客户呼叫。Accept()方法直到有连接请求才返回通信套接字(Socket)的实例。通过这个实例的输入、输出流,服务器可以接收用户指令,并将相应结果回应客户机。ServerSocket类的getInetAddress和getLocalPort方法可得到该服务器的IP地址和端口。 setSoTimeout和getSoTimeout方法分别是设置和得到服务器超时设置,如果服务器在timout设定时间内还未得到accept方法返回的套接字实例,则抛出IOException的异常。
Java的多线程可谓是Java编程的精华之一,运用得当可以极大地改善程序的响应时间,提高程序的并行性。在服务器程序中,由于往往要接收不同客户机的同时请求或命令,因此可以对每个客户机的请求生成一个命令处理线程,同时对各用户的指令作出反应。在一些较复杂的系统中,我们还可以为每个数据库查询指令生成单独的线程,并行对数据库进行操作。实践证明,采用多线程设计可以很好的改善系统的响应,并保证用户指令执行的独立性。由于Java本身是"线程安全"的,因此有一条编程原则是能够独立在一个线程中完成的操作就应该开辟一个新的线程。
Java中实现线程的方式有两种,一是生成Thread类的子类,并定义该子类自己的run方法,线程的操作在方法run中实现。但我们定义的类一般是其他类的子类,而Java又不允许多重继承,因此第二种实现线程的方法是实现Runnable接口。通过覆盖Runnable接口中的run方法实现该线程的功能。本文例子采用第一种方法实现线程。
二、多线程服务器程序举例
以下是我们在项目中采用的多线程服务器程序的架构,可以在此基础上对命令进行扩充。本例未涉及数据库。如果在线程运行中需要根据用户指令对数据库进行更新操作,则应注意线程间的同步问题,使同一更新方法一次只能由一个线程调用。这里我们有两个类,receiveServer包含启动代码(main()),并初始化ServerSocket的实例,在accept方法返回用户请求后,将返回的套接字(Socket)交给生成的线程类serverThread 的实例,直到该用户结束连接。
//类receiveServer
import java.io.*;
import java.util.*;
import java.net.*;
public class receiveServer{
final int RECEIVE_PORT=9090;
//该服务器的端口号
//receiveServer的构造器
public receiveServer() {
ServerSocket rServer=null;
//ServerSocket的实例
Socket request=null; //用户请求的套接字
Thread receiveThread=null;
try{
rServer=new ServerSocket(RECEIVE_PORT);
//初始化ServerSocket
System.out.println("Welcome to the server!");
System.out.println(new Date());
System.out.println("The server is ready!");
System.out.println("Port: "+RECEIVE_PORT);
while(true){ //等待用户请求
request=rServer.accept();
//接收客户机连接请求
receiveThread=new serverThread(request);
//生成serverThread的实例
receiveThread.start();
//启动serverThread线程
}
}catch(IOException e){
System.out.println(e.getMessage());}
}
public static void main(String args[]){
new receiveServer();
} //end of main
} //end of class
//类serverThread
import java.io.*;
import java.net.*;
class serverThread extends Thread {
Socket clientRequest;
//用户连接的通信套接字
BufferedReader input; //输入流
PrintWriter output; //输出流
public serverThread(Socket s)
{ //serverThread的构造器
this.clientRequest=s;
//接收receiveServer传来的套接字
InputStreamReader reader;
OutputStreamWriter writer;
try{ //初始化输入、输出流
reader=new InputStreamReader
(clientRequest.getInputStream());
writer=new OutputStreamWriter
(clientRequest.getOutputStream());
input=new BufferedReader(reader);
output=new PrintWriter(writer,true);
}catch(IOException e){
System.out.println(e.getMessage());}
output.println("Welcome to the server!");
//客户机连接欢迎词
output.println("Now is:
"+new java.util.Date()+" "+
"Port:"+clientRequest.getLocalPort());
output.println("What can I do for you?");
}
public void run(){ //线程的执行方法
String command=null; //用户指令
String str=null;
boolean done=false;
while(!done){
try{
str=input.readLine(); //接收客户机指令
}catch(IOException e){
System.out.println(e.getMessage());}
command=str.trim().toUpperCase();
if(str==null || command.equals("QUIT"))
//命令quit结束本次连接
done=true;
else if(command.equals("HELP")){
//命令help查询本服务器可接受的命令
output.println("query");
output.println("quit");
output.println("help");
}
else if(command.startsWith("QUERY"))
{ //命令query
output.println("OK to query something!");
}
//else if …….. //在此可加入服务器的其他指令
else if(!command.startsWith("HELP") &&
!command.startsWith("QUIT") &&
!command.startsWith("QUERY")){
output.println("Command not Found!
Please refer to the HELP!");
}
}//end of while
try{
clientRequest.close(); //关闭套接字
}catch(IOException e){
System.out.println(e.getMessage());
}
command=null;
}//end of run
启动该服务器程序后,可用telnet machine port命令连接,其中machine为本机名或地址,port为程序中指定的端口。也可以编写特定的客户机软件通过TCP的Socket套接字建立连接
㈣ java程序中代理服务器的设置问题
在内网渗透工作中,搭建反向socks5代理是常用手段之一,红队人员需将各种渗透工具连接至代理。然而,对于使用Java编写的工具,往往不具备socks5代理功能,导致使用proxifier挂载Java程序时出现各种问题。本文将介绍如何通过命令行解决这一难题,并纠正网上关于Java中socks5代理设置方法的错误。
启动socks5代理的命令格式为:
java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=1080 -jar webscan.jar
其中,`socksProxyHost`为socks5代理的IP地址,`socksProxyPort`为代理的端口号。若需要设置认证,网上文章提供的方法(如`java.net.socks.username`和`java.net.socks.password`)并不适用于命令行环境。实际测试中,此方法无效。
对于HTTP代理的设置,命令行格式如下:
java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=8080 -Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=8080 -Dhttp.nonProxyHosts="*.example.com|localhost" -jar webscan.jar
需要注意,若需设置HTTP代理,务必指定`http.proxyHost`和`http.proxyPort`;若需设置HTTPS代理,则指定`https.proxyHost`和`https.proxyPort`。同时,`http.nonProxyHosts`选项用于指定不走代理的URL。
在Java代码中直接添加`System.setProperty`设置代理更为简便。以下为设置HTTP/HTTPS代理的示例代码:
设置代理的代码示例如下:
设置Socks5代理的代码示例如下:
代理认证的代码编写如下:
总结而言,针对Java程序的代理设置,命令行方式提供了一种直接且有效的方法。官方手册是查找Java网络设置方法的重要资源。公众号致力于分享网络安全技术,包括APT分析、红队攻防等知识,每周更新原创内容,欢迎关注。