Java网络编程

2024-12-06

Java网络编程(共12篇)

Java网络编程 篇1

1 前言

Internet技术的发展促进了Java语言的发展,网络编程是Java语言的重要功能,Java系统的API中按类的形式提供了3种不同层次的网络技术机制,用URL访问网络资源的类,利用Socket(套接字)通信的类以及Datagram(数据报)类,这些网络功能都定义在Java.NET程序包中。网络应用是Java语言取得成功的领域之一,Java现在已经成为Internet上最流行的一种编程语言。

Socket类是基于客户/服务器模式而实现某些特殊应用的,其网络通信过程是利用TCP/IP协议中的传输层接口Socket来实现的。Socket就是这样的编号,它是作为网络上和另一个应用程序通信的连接句柄,应用程序通过系统和某个端口建立连接后,传输层传给该端口的数据都会被相应的应用程序所接收,同样应用程序发出给传输层的数据都从该端口输出。那么在TCP/IP协议中,对端口的操作类似于一般的I/O操作,进程获得一个端口就相当于获取本地唯一的一个I/O文件。

2 基于Socket的Java网络编程

2.1 Socket通信

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。Socket是TCP/IP协议的一个十分流行的编程界面,一个Socket由一个IP地址和一个端口号唯一确定。

在传统的UNIX环境下可以操作TCP/IP协议的接口不止Socket一个,Socket所支持的协议种类也不光TCP/IP一种,因此两者之间是没有必然联系的。在Java环境下,Socket编程主要是指基于TCP/IP协议的网络编程。

2.2 一般过程

使用Socket进行Client/Server程序设计的一般连接过程是这样的:Server端Listen(监听)某个端口是否有连接请求,Client端向Server端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client端都可以通过Send,Write等方法与对方通信。对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下4个基本的步骤:

(1)创建Socket。

(2)打开连接到Socket的输入/出流。

(3)按照一定的协议对Socket进行读/写操作。

(4)关闭Socket。

2.3 创建Socket

Java在包Java.NET中提供了两个类Socket和Server Socket,分别用来表示双向连接的客户端和服务端。这是两个封装得非常好的类,使用很方便。其构造方法如下:

Socket(Inet Address address,int port);

Socket(Inet Address address,int port,boolean stream);

Socket(String host,int prot);

Socket(String host,int prot,boolean stream);

Socket(Socket Impl impl)

Socket(String host,int port,Inet Address local Addr,int local Port)

Socket(Inet Address address,int port,Inet Address local Addr,int local Port)

Server Socket(int port);

Server Socket(int port,int backlog);

其中Address、Host和Port分别是双向连接中另一方的IP地址、主机名和端口号,Stream指明Socket是流Socket还是数据报Socket,local Port表示本地主机的端口号,local Addr和bind Addr是本地机器的地址(Server Socket的主机地址),impl是Socket的父类,既可以用来创建Server Socket又可以用来创建Socket。count则表示服务端所能支持的最大连接数。例如:

Socket client=new Socket("127.0.01.",80);

Server Socket server=new Server Socket(80);

注意,在选择端口时,必须小心,每一个端口提供一种特定的服务,只有给出正确的端口,才能获得相应的服务。0~1023的端口号为系统所保留,例如http服务的端口号为80,telnet服务的端口号为21,ftp服务的端口号为23,所以在选择端口号时,最好选择一个大于1023的数以防止发生冲突。

在创建Socket时如果发生错误,将产生IOException,在程序中必须对之作出处理。所以在创建Socket或Server Socket时必须捕获或抛出例外。

3 Client/Server程序设计

下面给出一个用Socket实现的客户和服务器交互的典型的C/S结构的演示程序,读者通过仔细阅读该程序,会对前面所讨论的各个概念有更深刻的认识。

例:客户端程序

4 结语

Socket实质上提供了通信的端点,即从Socket发送数据和从Socket接收数据,客户程序可以访问Socket写请求,服务器将处理此请求,然后通过Socket将结果返回用户。正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,显示出Java强大的网络编程功能。

摘要:针对不同层次的网络通信,Java提供的网络功能有4大类:URL、InetAddress、Socket、Datagram。以基于Socket的Java网络编程为例,来探讨Java网络编程,具有一定的参考价值。

关键词:Java,网络编程,研究

参考文献

[1]吴凤祥,孙新胜,苑迎春.Java中基于TCP/IP的Socket编程[J].河北农业大学学报,2004,(02):123-126.

[2]王之怡.基于C/S结构的Java网络数据库编程[J].电脑编程技巧与维护,2003,(06):114-117.

[3]闵小玲.基于Java语言Socket通信的实现方法[J].黄石高等专科学校学报,2004,(04):105-106.

[4]赵文清,姜波.基于Socket的Java语言网络通讯机制和程序设计[J].信息技术,2002,(07):136-140.

[5]程海鹰,刘华毅.用Java Socket实现网络聊天室[J].计算机与网络,2002,(05):178-179.

Java网络编程 篇2

JAVA编程习题1

4.test10097求两个数的和

/*输入n表示做n次下面的操作: 输入两个正整数,输出它们的和.例: 输入:

//表示n=2,做两次操作 10 11 20 30 输出: sum=21 sum=50 */

5.test20001求两个数的和与差

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

/*程序填空,不要改变与输入输出有关的语句。输入整数a和b,计算并输出a、b的和与差。例: 输入 2-8 输出 The sum is-6 The difference is 10*/

6.test20002求平方根

//程序填空,不要改变与输入输出有关的语句。输入1个实数x,计算并输出其平方根。例: 输入 1.21 输出

The square root of 1.21 is 1.1

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

7.test20003华氏温度转换成摄氏温度

/*程序填空,不要改变与输入输出有关的语句。

输入华氏温度f,计算并输出相应的摄氏温度c。c = 5/9(f-32).例:括号内是说明 输入

17.2(华氏温度)输出

The temprature is-8.****/

8.test20004计算旅途时间

程序填空,不要改变与输入输出有关的语句。

输入2个整数time1和time2,表示火车的出发时间和到达时间,计算并输出旅途时间。

有效的时间范围是0000到2359,不需要考虑出发时间晚于到达时间的情况。

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

例:括号内是说明 输入

712 1411(出发时间是7:10,到达时间是14:11)输出

The train journey time is 6 hrs 59 mins.9.test20005数字加密

程序填空,不要改变与输入输出有关的语句。输入1个四位数,将其加密后输出。方法是将该数每一位上的数字加9,然后除以10取余,做为该位上的新数字,最后将第1位和第3位上的数字互换,第2位和第4位上的数字互换,组成加密后的新数。例:括号内是说明 输入 1257 输出

The encrypted number is 4601(每一位上的数字加9除以10取余后,得0146,交换后得到4601)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

10.test20006大小写字母转换

程序填空,不要改变与输入输出有关的语句。输入一个大写英文字母,输出相应的小写字母。例: 输入 G 输出 g

import java.io.*;public class T20006 {

public static void main(String[] args)throws IOException

{

char ch;

ch=(char)System.in.read();

/*------------------*/

ch=(char)(ch+32);

// 以ASCII码计算

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

}

System.out.println(ch);

} 11.Test20007计算三门课程的平均成绩

程序填空,不要改变与输入输出有关的语句。

已知某位学生的数学、英语和计算机课程的成绩分别是87分、72分和93分,求该生3门课程的平均分。本题无输入。输出示例:

math = 87, eng = 72, comp = 93 average = 84

12.test20008计算存款利息

程序填空,不要改变与输入输出有关的语句。输入存款金额 money、存期 year 和年利率 rate,精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

根据下列公式计算存款到期时的利息 interest(税前),输出时保留2位小数。

interest = money(1+rate)^year10 / 2 =

(数字与运算符之间有一空格)输出 5 10 */ /*补充知识:in.next()与in.nextline()的区别

in.next只接受一个字,不能接受一个带有空格的字符串,如下: 例如输入: Show me--(回车)用next()只能得到Show,因为遇到空格表示结束,但是nextline()则要遇到回车才知道结束.可以看一个例子,演示给大家看,如下:----------

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

import java.util.Scanner;public class Test60011{

public static void main(String []args)

{

String s1_1,s1_2,s2;

Scanner in=new Scanner(System.in);

s1_1=in.next();

System.out.println(s1_1);

System.out.println(“----------”);

in.nextLine();// 把剩余的吃掉

s2=in.nextLine();

System.out.println(s2);

System.out.println(“----------”);

s1_1=in.next();

s1_2=in.next();

System.out.println(s1_1+“

”+s1_2);

} }------------*/

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

39.求1+1/2!+……1/N!//求1+1/2!+1/3!+....(用方法求n!)

40.求a+aa+aaa+……(用方法)//求a+aa+aaa+aa…a

41.统计一个整数中数字的个数

/*程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=3)-21902 2

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

345543 输出:

count=2

(-21902中有2个2)count=1

(有1个2)count=0

(345543中没有2)*/

42.判断素数(用方法)

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

NO

(1不是素数)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

YES

(2是素数)NO

(9不是素数)YES

(17是素数)

43.统计素数并求和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(素数就是只能被1和自身整除的正整数,1不是素数,2是素数)。要求定义并调用函数prime(m)判断m是否为素数。例:括号内是说明 输入:

(repeat=3)1 10

(m=1, n=10)20 35(m=20, n=35)14 16(m=14, n=16)输出:

count=4, sum=17

(1到10之间有4个素数:2,3,5,7)count=3, sum=83

(20到35之间有3个素数:23, 29, 31)count=0, sum=0

(14到16之间没有素数)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

44.输出Fibonacci序列

/*程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

Fibonacci 序列(第1项起):1 1 2 3 5 8 13 21......要求定义并调用函数fib(n),它的功能是返回第n项Fibonacci数。例如,fib(7)的返回值是13。输出语句:System.out.print(f+“ ”);

例:括号内是说明 输入:

(repeat=3)1 10

(m=1, n=10)20 100(m=20, n=100)1000 6000(m=1000, n=6000)输出: 1 2 3 5 8

(1到10之间的Fibonacci数)21 34 55 89

(20到100之间的Fibonacci数)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

1597 2584 4181

(1000到6000之间的Fibonacci数)*/

45.求完数

/*输入2 个正整数m和n(1<=m,n<=1000),输出m 到n之间的所有完数

(完数就是因子和与它本身相等的数)。

要求定义并调用函数factorsum(number),它的功能是返回number的因子和。

例如,factorsum(12)的返回值是16(1+2+3+4+6)。输出语句:System.out.print(i+“ ”);例:括号内是说明 输入: 2

(repeat=2)20 500(m=100, n=400)1 100

(m=1, n=100)输出: 28 496 1 6 288*/

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

46.求各位数字的立方和等于它本身的数 程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

输出语句:System.out.print(i+“ ”);例:括号内是说明 输入: 2

(repeat=2)100 400(m=100, n=400)1 100

(m=1, n=100)输出:

153 370 371(1*1*1+5*5*5+3*3*3=153;3*3*3+7*7*7=370;3*3*3+7*7*7+1*1*1=371)1

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

47.将一个整数逆序输出

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

要求定义并调用函数reverse(number),它的功能是返回number的逆序数。

例如reverse(12345)的返回值是54321。例:括号内是说明 输入

(repeat=4)123456-100-2 99 输出 654321-1-2 99

48。十进制转换二进制

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

程序填空,不要改变与输入输出有关的语句。

输入一个正整数 repeat(0

要求定义并调用函数 dectobin(n),它的功能是输出 n 的二进制。例如,调用dectobin(10),输出1010。

输出语句:System.out.print(t);

//t为某位二进制数 例:括号内是说明 输入: 3

(repeat=3)15 100 0 输出: 1111 1100100 0

49。求平均值

程序填空,不要改变与输入输出有关的语句。

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

输入一个正整数repeat(0

(repeat=2)3 1 2-6 5 12 2 5 4 0 输出 aver=-1.0 aver=4.6

50。求最大值及其下标

/*输入一个正整数n(1

(设最大值惟一,下标从0开始)。例:括号内是说明 输入

(repeat=3)3 1 6 4 3 10 8 1 5 1 2 5 4 0

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

输出

max=6,index=1

(最大值6的下标是1)max=10,index=0

(最大值10的下标是0)max=5,index=2

(最大值5的下标是2)*/

51。逆序输出

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=2)4 10 8 1 2 5 1 2 5 4 0 输出 2 1 8 10 0 4 5 2 1

52。交换最小值和最大值

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

最大值与最后一个数交换,然后输出交换后的n个数。例:括号内是说明 输入

(repeat=3)5 4 3 5 1 2 4 1 5 6 7 5 5 4 3 2 1 输出 1 3 2 4 5 1 5 6 7 1 4 3 2 5 53。排序

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=3)4 5 1 7 6 3 1 2 3 5 5 4 3 2 1

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

输出 7 6 5 1 3 2 1 5 4 3 2 1

54。矩阵运算

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(2+3+4+5+6+7+8=35)

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

55。加法口诀表

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=1)3

(n=3)输出: +

56。判断上三角函数

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(上三角矩阵,即主对角线以下的元素都为0, 主对角线为从矩阵的左

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

上角至右下角的连线)例:括号内是说明 输入:

(repeat=2)3 1 2 3

0 4 5 0 0 6(n=3)2 1 0-8 2

(n=2)输出: YES NO

57。求矩阵每行元素之和

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=1)3 2(m=3, n=2)6 3 1-8

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案 12 输出: sum of row 0 is 9 sum of row 1 is-7 sum of row 2 is 15

58。找鞍点

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

(repeat=2)4 1 7 4 1 4 8 3 6 1 6 1 2 0 7 8 9(n=4)2 1 7 4 1

(n=2)输出: a[2][1]=6 NO

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

59。求字符串长度

程序填空,不要改变与输入输出有关的语句。连续输入一批以 # 结束的多串字符。统计并输出每串字符的长度。输出使用:System.out.println(len);例:括号内是说明 输入:

hello 12#abc+0#

(连续输入2串字符“hello 12”和“abc+0”)输出:

(“hello 12”的长度是8)5

(“abc+0”的长度是5)

60。统计大写辅音字母

程序填空,不要改变与输入输出有关的语句。输入一个正整数n(0

输入一行字符串,统计并输出字符串中大写辅音字母的个数(大写辅音字母:除“A”,“E”,“I”,“O”,“U”以外的大写字母)。例:括号内是说明 输入:

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

(输入3个字符串)HELLO IT12 uieiaba 输出:

(“HELLO”中有3个大写辅音字母)1

(“IT12”中有1个大写辅音字母)

0

(“uieiaba”中没有大写辅音字母)

61。查找字符

程序填空,不要改变与输入输出有关的语句。

先输入一个字符ch。然后输入一个正整数n(0

输入一行字符串,在字符串中查找该字符(ch),如果找到,则输出 该字符在字符串中最后出现的位置(从0开始);否则输出“Not Found”。例:括号内是说明 输入:

m

(输入一个字符)3

(要输入3行字符串)moon

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

programming 1234

输出:

0

(m在“moon”中最后出现位置是0)7

(m在“programming”中最后出现位置是7)Not Found

(“1234”中没有m)

62。字符串替换

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

对应字母

A ──→ Z

B ──→ Y

C ──→ X

D ──→ W

……

X ──→ C

Y ──→ B

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

Z ──→ A 例:括号内是说明 输入:

(输入3行字符串)A flag of USA IT12 oueiaba 输出: Z flag of FHZ RG12 oueiaba

63。十六进制转换十进制

程序填空,不要改变与输入输出有关的语句。

输入一个正整数repeat(0

个新字符串(十六进制形式),然后将其转换为十进制数后输出。例:括号内是说明 输入:

精心收集

精心编辑

精致阅读

如需请下载!

演讲稿 工作总结 调研报告 讲话稿 事迹材料 心得体会 策划方案

(输入3行字符串)10 Pf4+1-+A

输出: 16 3905 10

-----------------------

精心收集

精心编辑

精致阅读

Java网络通信对ICQ的实现 篇3

ICQ是英文“I seek you”的简称,中文意思是我找你。ICQ最大的功能就是即时信息交流,只要把对方加为好友,上网时可以呼他,无论他在哪里,只要他上网打开ICQ,人们就可以随时交流。简单的说,就是点对点的网络聊天系统。该ICQ系统利用网络传输协议、后台数据库完成了客户端与服务器端、客户端与客户端的网络通信,最终为客户的各个领域提供了完美的集成,使得本系统可以更低成本、更高效率地满足用户的需求,从而可以最大程度的提高用户的满意度,挽回失去的用户,保留现有的用户,不断发展新的用户,发掘并牢牢地把住带来最大价值的用户群。

关键词:ICQ;java;网络通信

中图分类号:TP393.092文献标识码:A文章编号:1007-9599 (2013) 06-0000-02

计算机越来越成为我们生活中的重要工具。计算机可以用来写信、听音乐、看电视、通过可视电话进行通信,通过Internet网进行信息查询、网上购物等。计算机正在改变我们的通信、工作和娱乐的方式。

聊天是Internet中广泛应用的服务之一,ICQ是一种端到端的即使通信聊天系统,用户可以在安装的客户端的帮助下同朋友家人实现无延时的即时通讯效果。要实现这种效果,需要借助现在存在的遍布的Internet网络,用现在通用网络层,传输层通讯协议TCP/IP实现。另外要实现客户端和服务器端的正确交互和识别,还需要开发一种简单的应用层协议。目前主流的编程语言对TCP/IP协议都有强大的支持,具体java实现ICQ需要借助SUN公司提供的开发工具集JDK中的net包提供对JavaSocket的支持。

系统采用注册登录模式,需要服务器端采用数据库保存用户注册登录信息,系统采用开源的中小型网络通用数据库MYSQL提供支持。利用JDBC借助MYSQL对java支持包,提供Java对数据库的支持。

系统采用通用的C/S系统,要客户端保持和服务器端的连接,并有服务器端转发或处理用户请求。考虑系统的实用性,系统采用Java TCP的连接类ServerSocket和Socket类,有客户端发起连接,服务器端不断监听,当用用户连接是立马有主控线程开启一个分线程保持和客户端的连接。

系统采用通用的C/S结构,即Client/Server(客户端/服务器)结构,C/S是传统意义上的拥有客户端和服务器端的网络软件和系统。在客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。

这里客户和服务器都是指通信中所涉及的两个应用进程(软件)。使用计算机的人是计算机的“用户”(User)而不是“客户”(Client)。但在许多国外文献中,也经常把运行客户程序的机器称为Client(这种情况下也可把Client译为“客户机”),把运行服务器程序的机器称为Server。所以有时要根据上下文判断Client与Server是指软件还是硬件。

它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server应用都可以进行同样的业务处理;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。

Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C++语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:语言简单、语言是一个面向对象的、语言是分布式的、语言是健壮的(对指针的丢弃是Java的明智选择)、语言是安全的、语言是体系结构中立的、语言是可移植的(Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。)、语言是解释型的、高性能的、多线程的和动态的。

Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。

Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、寄存器、堆栈等,还具有相应的指令系统。

Java语言的一个非常重要的特点是平台的无关性。而使用Java虚拟机是实现这一特点的关键。一般的高级语言如果要在不同的平台上运行,至少需要编译成不同的目标代码。而引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

Java虚拟机是Java语言底层实现的基础,了解它有助于理解Java语言的一些性质,也有助于使用Java语言。对于要在特定平台上实现Java虚拟机的软件人员,Java语言的编译器作者以及要用硬件芯片实现Java虚拟机的人来说,则必须深刻理解Java虚拟机的规范。另外,如果你想扩展Java语言,或是把其它语言编译成Java语言的字节码,你也需要深入地了解Java虚拟机。

JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。自从Java推出以来,JDK已经成为使用最广泛的Java SDK。JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。JDK是学好Java的第一步。而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了很大的提高。

Jdk常用包有java.lang、java.io、java.net、ava.util、java.sql和javax.servlet等类。

Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

通常ICQ为了满足用户需求,需要提供登录注册,实现用户资料的管理、查找好友、添加删除好友及基本的聊天功能。系统必须保证可靠的网络通信,大量用户的并发访问,及对用户基本信息的管理等功能。

近年来,随着市场与技术的不断发展,无论是个人还是企业等组织机构,对沟通的需求也在不断发展,传统的电话、传真、邮件等沟通方式显然已无法满足当今人们工作和生活沟通的需要。随着软件、网络和通讯三大现代信息技术的发展,在沟通、协作方面有着更多方便、快捷、实时等优势的即时通讯(IM),成为继电话、E-Mail之后又一个完全融入每个人生活的互联网工具。它所拥有的实时性、跨平台性、成本低、效率高等诸多优势,成为网民们最喜爱的沟通方式。

参考文献:

[1]Eric.Java编程思想[M].第四版.机械工业出版社.

[2](美)希尔德.JAVA参考大全(J2SE 5 Edition)[M].清华大学出版社.1900,1.

[3]http://v.youku.com/v_show/id_XNTQ3OTg5ODg4.html.

Java网络编程 篇4

1 JAVA语言概述

其主要特征包括以下几个方面:1) 语言难度较低, 从语法上来看JAVA与C++较为相似, 因此只要具有一定的C++基础都可较好的适应JAVA, 同时Java语言不使用指针, 而是引用并且还具备了自动废料手机, 因此程序员无需担心内存管理。2) JAVA语言在面向对象时具有一定的强制性, 一般只支持类之间的单继承, 对于接口而言则可支持多承接, 同时JAVA语言支持动态绑定, 也就是说JAVA语言属于典型的面向对象语言。3) 分布性。在JAVA应用当中其编程接口存在一个javanet, 它带来了网络应用编程类库从而使JAVA具备了分布性。4) 安全性。JAVA具备专门的安全机制可有效避免恶意代码攻击, 同时网络下载的类也具备了与Class Loader相似的安全防范功能。5) 动态性[2]。JAVA语言最初设计目标是能够让语言可满足环境动态变化, 这便于应用升级。在这个过程中JAVA可动态性地被置于运行环境当中, 同时也能够利用网络环境向其中置入类。

2 基于JAVA的网络安全通信分析

由于JAVA对于网络环境具有专门的面向性, 因此可以完全面向对象的方式带来相关的支持, 从机制方面来看主要分为两个层次:1) 通过是利用Socket实现CLIENT/SERVER通信模式的类库。在通信协议的支持下类库也可采取两种方式进行通信, 首先可通过具备连接的流方式进行通信。在此连接上, 可采取相同进程提供字节流服务, 而这些字节流具有可靠性、有序性等特征, 保证了通信的稳定。2) 数据报方式在无连接条件下进行。该方式无需在系统初始化时连接, 并且I/O操作可由不同主机完成亦可在不同进程当中操作, 同时可进行独立分组进行传输, 长度一般为32kb[3]。在传输过程中并不能保证数据的顺序性、可靠性等特性。因此在安全性上也不如流方式。

另一方面JAVA可以通过统一资源来对URL进行有效定位, 那么当用户对应用类库进行访问时就无须对URL当中的条件协议进行处理, 这也使其可给予HTTP充分的支持。以JSSE客户端为例, 基于JSSE可为Java应用程序提供Java API, 同时JSSE可支持数据加密并可实现服务器端身份验证, 可保持数据的完整性, 利用JSSE可保证基于HTTP、Telnet、FTP等协议的客户程序与服务器进行有效的数据交换。若要使JSSE可顺利进行上述过程, 需要相关证书作为保证。以下为客户端局部代码:

3 结语

正是由于利用JAVA可对各类用户接口进行有效处理, 为设置网络访问权限提供了极大的便捷并且适用于各个平台, 需要注意的是利在JAVA (JSSE) 的应用过程中要先置入有效的证书才能使其正常工作。JAVA为网络安全通信来说带来了强力的技术支持, 值得推广。

参考文献

[1]廉洁, 赵群荣, 乌兰.Java网络安全研究[J].内蒙古民族大学学报 (自然科学版) , 2008.

[2]范婕, 贾伟.电子商务中的安全问题及对策探讨[J].大众科技, 2008.

java编程就业前景 篇5

Java开发行业前景

Java语言是一门很实用的语言,在互联网的应用十分广泛,目前采用JAVA语言开发的网站也越来越多,所以对Java开发人才的需求量也是倍增。虽然说现在新的开发语言在市场上越来越多,但是根据有关数据表明,在所有程序员中,Java开发程序员就占据20%的比例。这说明Java开发仍然是一个热潮,它强大的影响力已经证明了自己的王者风范。

一位软件开发行业的前辈讲到,不可否认Java开发语言本身的庞大,它是全球最流行的开发语言,给程序界带来很大的影响,势必继续影响着整个互联网。

从人才需求方面看,软件开发是当下的发展趋势,而我国的软件开发人才极为缺乏,其中java人才缺口最大,对java软件工程师的需求达到全部需求量的60%-70%,如今互联网的趋势是移动端,Java又是安卓开发的基础,所以人才的需求又增加一大波。

从薪资水平看,java软件工程师的薪资相比其他开发工程师高出许多,具备3-5年工作经验的开发人员年薪都可以达到20到30万元。

所以说java的发展前景还是非常可观的,如果可以真正学好java这门技能,那我们的发展前景也是不可估量。现在很多人选择参加培训机构,这不失为一个最佳的选择,当然最重要的还是靠自己的努力。

Java软件工程师的就业前景

java软件工程师就业前景如何是许多软件工程师都困惑的问题,他们有的时候甚至不知道自己选择的行业是否正确,为了帮助许多java软件工程师走出困境,下面就是专门针对java软件工程师就业前景进行详细的解析,在了解了相关的情况下,不知道你否还会坚持在软件工程师的行业中继续发展。

java软件工程师就业前景的好坏主要从Java的应用领域来看,Java语言的应用方向主要表现在以下三个方面:

首先是大中型的商业应用,包括我们常说的企业级应用(主要指复杂的大企业的软件系统)、各种类型的网站,Java的安全机制以及它的跨平台的优势,使它在分布式系统领域开发中有广泛应用;

其次是桌面应用,就是常说的C/S应用,主要用来开发运行于不同的操作系统上的桌面应用程序;

再次是移动领域应用,主要表现在消费和嵌入式领域,是指在各种小型设备上的应用,包括手机、PDA、机顶盒、汽车通信设备等。

近年来我国信息化发展越来越快,使得全国各地的信息化建设如火如荼,出现了大量的信息化人才尤其是Java软件人才的缺口,而我国信息化人才培养还处于发展阶段,导致社会实际需求人才基数远远大于信息化人才的培养基数,使得数以万计的中小企业急需全面系统掌握Java软件开发基础技能与知识的软件工程师。

根据2016年11月TIOBE开发语言排行榜宣布的流行开发语言的排名结果,Java仍然高居榜首,在国内的软件开发企业中,Java语言的使用比例也排名第一。

我国目前对软件人才的需求已达20万,并且以每年20%左右的速度增长。在未来5年内,合格软件人才的需求将远大于供给。

根据IDC的统计数字,在所有软件开发类人才的需求中,对Java工程师的需求达到全部需求量的60%~70%。应该说Java软件工程师的就业机会和前景是非常大的。再加上Java软件工程师不仅IT专业企业需要,广大的非IT企业也需要。前景是非常乐观的。

同时,Java工程师的薪水相对较高。通常来说,具有3~5年开发经验的工程师,拥有年薪10万元是很正常的一个薪酬水平。但是,对Java人才需求旺盛的IT企业却很难招聘到合格的Java人员。

其中,最根本的原因就是许多计算机专业的毕业生在读期间没有掌握实用的技能与经验,距离企业的实际用人需求有较大的差距。因此,计算机专业的大学生欲成为Java工程师,最便捷的一条路就是参加以实战项目为主要教学方法的Java职业技能培训,从而有效地缩短同企业具体用人需求之间的差距。

要使用Java语言胜任企业工作并不容易。比如要成为一名Java架构师,必须精通设计、需求分析、各种开源工具、JavaEE的底层技术;熟悉工作流程、权限框架、门户框架等。而要成为一名Java普通程序员,必须具备基本的J2EE技术(JSP、Servlet、Java语言),SSH(Struts、Spring、Hibernate)框架开发,一定的数据库设计能力和数据库使用经验,熟悉Web开发技术(比如html+css+Javascript,会ajax更好)。

当前世界各地持有JavaProgrammer证书的人员供需差距极大,迫使企业不得不用高薪聘请Java程序员。因此,JavaProgrammer的含金量比一般的技术人员要高出很大一块。在美国、加拿大、澳大利亚、新加坡等发达国家和中等发达国家,持有JavaProgrammer认证证书的人年薪均在4-10万美金,而在国JavaProgrammer认证的程序员也有极好的工作机会和很高的薪水。

java软件工程师就业前景其实不是一成不变的,而是随着人们的他的需要而变化的,当我们大量需要的时候往往java软件工程师就业前景就会比较明朗,相反的我们不需要了,那么java软件工程师就业前景还会好吗?我们要做的不是看前景的好坏,而是针对自己展开分析。

更多热门文章推荐:

1.2016Java就业前景如何

2.2015年就业前景最好的十大专业

3.数控技术未来就业前景怎么样?

4.2016学习IT的就业前景分析

5.2016年信息管理与信息系统就业前景如何

6.2016年数控技术就业前景怎样?

7.软件工程师的就业前景

8.2015专业就业率前十的排名

9.数控技术专业毕业生就业前景怎么样?

Java网络编程 篇6

关键词 复杂网络 软件体系 程序分析

中图分类号:TP3 文献标识码:A

0前言

网络信息技术的飞速进展,促使人们的各项生活不断的自动化、智能化、信息化、现代化,这在很大的程度上推动了国内经济的发展。基于复杂网络之下的Java程序分析工具之中,其JPAC的运用,合理有效的提升了Java软件体系的可靠性、稳定性以及高效率,有效的推进了现代化软件产业的持续发展。

1 JPAC工具原理及整体结构

1.1 软件体系结构

JPAC工具最主要的目的就是为Java软件的相关体系结构构筑复杂网络。Myers其定义了一个可以代表相关的软件体系结构网图,也就是软件协作图(SCG),其与UML中的类图非常类似。可以进一步把SGG进行细化为了可以描述Java软件体系结构的JavaSCG。如图1,简单JavaSCG构建实例。

图1 简单JavaSCG构建实例

把其构建的JavaSCG作为是可以代表Java软件体系结构的对应网络,能够对相关的网络特性实行详细的分析。网络级特性也就是代表了全局特性,这些特性合理的反映了Java复杂软件体系中对应复杂网络情况。

1.2 软件体系结构演化

复杂网络也还具有一定的演化特性,依据复杂网络的演化模型演化相关的网络,并且在相关的演化之后依然具备复杂网络特性。

图2 基于模块软件的演化模型演化过程

有研究人员把复杂网络演化概念应用至软件体系结构中,并提出一种基于对应模块的软件演化模型。该演化模型合理的模拟了软件体系结构的复杂网络特性形成的全部过程,并且和复杂网络的相关演化一致,软件体系结构会依据该模型的对应演化,从而得到的网络仍然具备复杂网络的相关特性。如图2,为该模型的具体流程图,P1、P2、P3代表了相关的过程被执行概率,在进行新边链接时考虑了其相关的软件结构模块的存在。

1.3 工具整体结构

考虑到前两小节所述,JPAC工具是应合理的实现Java程序相关代码实行分析,并为相关的Java软件体系结构构件复杂网络的相关功能。并且对构件好的相关复杂性网络,展开复杂性网络特性合理分析,有效的显示软件体系结构复杂网络的相关特性,并进行合理有效的软件结构演化规律。与此同时,JPAC工具也能够提供较为抽象化的复杂网络,促使人们能够对其相关的特性及演化规律展开模拟性研究。所以,可以把JPAC工具的相关功能依据对应层次展开划分,主要可以分为三个层次的模块:

(1)数据分析层

其是相关工具的最底层,主要是和Java的代码文件或者是XML文档展开对应交互,并封装了Java的代码以及XML文档至相关的网络计算所表示的构建过程。其能够不依靠于高层数据运算层及用户界面层的相关存在,所以对应的用户能够依据其需要来增加数据分析层所需要的各类对应功能。

(2)数据运算层

其有效的呈现了依据数据分析层所提供的相关网络功能运算,例如,统计分析和演化模拟运算。该运算是指对相关的网络计算机的表示实行对应操作以及计算。数据的运算层可以进行一定程度的扩展,属于可扩展层次。

(3)用户界面层

用户界面层是处在最上层的,其是负责把相关的网络计算机表示呈现为可视化,把其运算的结果可视化,并为用户提供可靠的操作等。

2 基于复杂网络的Java程序分析工具设计

对于JPAC工具设计来讲,依据JPAC工具结构可以将其分为三个层面,数据分析设计、数据运算设计以及用户界面设计,以合理有效的呈现JPAC对Java的系统软件运用复杂网络进行构建,也就是进行JavaSCG的构建。

2.1数据分析设计

在对应的数据分析中,数据分析层则主要包括了Java代码以及存取XML文档、计算机网络的内部网络功能从而生成三个主要的功能,在JPAC工具的相关设计中可应用BCEL技术来实行字节的码文分析以及DOM技术对XML文档分析,其能够构建相对应的网络,并且对其储存,提供给较高层运用。对于数据分析层来讲,其有五种类图来同步完成相关数据分析层的功能支持。ProgInput是属于抽象类图,能够对Java相关的文件实行读入以及解析操作,以有效的呈现Java文件的相关解析;XMLParse则是应用DOM技术对XML文档实行一定程度的解析,进而合理的呈现XML文档的对应读入及保存;DataLayer是较为抽象的一种图类,其可以用于相关的保存构建网络;JavaBinDataLayer是具体化类图,其应用于保存Java体系的结构构建网络;RandomDataLayer属于具体化类图,其用于随机网络的保存。

2.2 数据运算设计

在JPAC的相关工具设计过程中,是基于JavaSCG的相关构建,数据的运算层能够实行多种运算,并且依据实际用户的各种需求来实行功能的扩充,所以,JPAC工具的相关数据运算层能够实行一定的统计分析以及演化模拟运算。

2.3 用户界面设计

在相关的JPAC工具中,对应的用户界面设计是应用EdlipseRCP框架,其运转的速度较快以及相对应的功能强大、可扩展等特性,属于RCP在Eclipse上所研发的一种客户端的运用平台。其开发了对应的插件功能,依据客户的不同需求,来呈现JPAC的扩展。因为Eclipse以及Java具备一定的跨平台功能,所以,JPAC工具能够在多种平台之下运行。

3 复杂网络环境之下的Java程序分析功能实践

Version1.5JDK为例,运用JPAC工具的相关复杂网络统计特性来展开计算。经过对V1.5版本的JDK之中的Java包分析而获得,其网络的中心节点读书较大,并且在中心周围也会分布着些许度数较大的相关节点,小节点主要分布在网络的周边,这充分的显示了无标度特点的相关迹象。依据上述分析可得,JDK系统结构的网络是具备小世界的对应效应以及幂率度分布特性,这就证明复杂网络的特性是在JDK的体系中所存在。

因为JDK体系是最常见的Java软件体系,所以,相关的定义上可以说明复杂的网络之下Java程序的分析工具有着复杂网络特性。并且,经过应用、探究以及分析,能够得到Java软件体系也是具备一定的演化特性,这能够为软件研发人员提供可靠的研究依据,有效的促进软件的研发技术水平持续提升。

4 结语

近些年,信息化的不断进步促使网络化环境逐渐的变得复杂,提升软件对于相关体系的合理支持、管理以及维护,就成为了当下各类软件开发的重点。想要更合理有效的进行软件开发,复杂网络的有效管理,软件的开发人员依据其相关网络特性、性质、变化,合理的提出Java程序的对应分析工具,这样有效的推进Java程序代码分析与复杂软件体系的研究。

Java工具研发以及运用,提供了复杂网络环境为Java软件体系,促进对Java软件的相关体系网络特性及变化规律展开深层探究,推进Java软件体系基于复杂网络之下的探究能够持续探究并创新。

参考文献

[1] 陈焘,李孔文,王树森,顾庆,陈道蓄.基于复杂网络的Java程序分析工具设计与实现[J].计算机科学,2013(4).

[2] 李龙飞.基于复杂网络的Java程序分析工具设计与实现思路浅谈[J].电脑知识与技术,2014(6).

Java网络编程 篇7

Java网络编程的目的就是直接或间接地通过网络协议与其他计算机进行通讯,而广泛的应用之一就是连接到网络数据库上,从而获取网络资源。

网络上的计算机要互相通信,必须遵循一定的协议。Java网络编程支持现在广泛使用的网络协议:TCP/IP协议和UDP协议,但使用方法上是不同的。

1.1 使用TCP/IP协议

TCP/IP协议是一种面向连接的保证可靠传输的协议,通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方必须成对地建立两个socket连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。

1.2 使用UDP协议

UDP协议是一种无连接的协议,不保证信息的可靠传输,由Java技术中的Datagram Socket和Datagram Packet类支持。Datagram Socket对应TCP/IP协议下的Socket概念,但不需要创建两个socket,不可使用输入输出流。Datagram Packet数据包,是UDP协议下进行传输数据的单位,数据存放在字节数组中,其中包括了目标地址和端口以及传送的信息(所以不用建立点对点的连接)。

由于TCP/IP协议能够提供可靠的数据传输,如何在发送方和接收方建立Socket连接是关键的步骤,下面我们介绍目前比较常用的Java程序中建立Socket的几种方法。

2 基于TCP/IP协议的Socket连接方法

Java中Socket连接的建立是通过Socket类实现的,通过重载的构造函数可以直接连接服务器,也可以建立未连接的Socket对象,并通过connect方法来连接服务器。此外,还支持自动或手动方式选择本机的IP地址。

2.1 通过构造函数直接连接服务器

(1)自动选择IP。

这种方式是最常用的。使用的构造函数有如下两种:

在使用时只需要提供一个字符串类型的IP地址或域名以及一个整型的端口号即可,可能会抛出两个异常:Unknown Host Exception(提供的host并不存在或不合法)和IOException(其它的错误)。

这个构造函数只是将字符串形式的host改为Inet Address对象类型了,从而支持使用Socket类多次连接同一个IP或域名,效率比较高。在这个构造函数中只会发生IOException异常,Unknown Host Exception异常由Inet Address类抛出。

(2)手动绑定IP。

当本机有多块网卡或者在一个网卡上绑定了多个IP时,在连接服务器时也可以通过构造函数指定需要使用哪个IP。这时可以使用Socket类的另外两个构造函数来处理。

这两个构造函数的参数分为两部分,第一部分为前两个参数分别表示要连接的服务器的IP和端口号。第二部分为后两个参数,其中inetaddress1表示要使用的本地IP,而local Port则表示要绑定的本地端口号,在一般情况下将local Port设为0。

2.2 通过connect方法连接服务器

可以先建立未连接的Socket对象,再通过类的connect方法来连接服务器,还可以通过类的bind方法来绑定本地IP。

下面,通过一个实例来演示以上方法建立Socket连接。

假设有两台计算机:PC1和PC2。PC1绑定有两个IP:192.168.1.100和200.200.200.1。PC2绑定有一个IP:200.200.200.4。PC1和PC2的子网掩码都是255.255.255.0。而PC1的默认网关为:192.168.28.254。下面的代码需要在PC1上运行。

3 综述

Java网络编程可以支持多种协议,而在TCP/IP协议下建立Socket连接也有多种方法,其中IP地址和网关的设置都会影响连接的建立,还需要在应用时由编程者保证代码执行后连接的建立,才能执行之后的收发双方I/O通道的建立及通信过程。

参考文献

Java网络编程 篇8

目前存在的比较常见编程语言大概有100多种, 其中使用的较多的大概在30中左右, 根据编程语言榜的统计, Java在使用率上始终占据前三位, 其中很多时候位列第一名。其实语言并没有高低贵贱好坏之分, 不能统一地来比较, 每门语言都有它独特的魅力以及优点, 每门语言设计的时候都有其产生背景, 只有在适合的环境中, 才能发挥其最大的威力。比如C语言适合编写比较底层的程序, 系统级编程的时候用的较多;C++, C语言的扩充版, 时候编写对效率要求比较高的程序, PHP, 在快速开发Web应用的时候最得心应手, 而对于文中介绍的Java, 则在网络编程中最能发挥其功效。将从实际应用的高并发网络编程中介绍Java相关的设计模式以及其实际表现。

在目前的互联网生态环境中, 大量的应用都有很高的访问压力, 比如搜索引擎、微博、社交网络等, 在这种环境中, 选择Java开发高并发处理程序即快速又高效。

2 不同应用中基于Java的高并发编程架构

Java目前已经发布了JDK7, 每个版本都有新功能的增加, 不过其中对于Java来说1.4版本是个重要的里程碑, 在1.4版本中, Java增加了NIO相关的API, 对于Java来说, 使其网络编程的能力有了质的提升。目前的互联网应用中主要有两种类型的高并发应用, (1) 单数据源的情况, (2) 多数据源的情况, 在这两种情况下, Java的高并发处理模式可以选择不同的模式, 如图1所示。

从图1中可以看出, 单数据源的情况是request过来, 添加至request等待队列, 如果队列长度不为零, 则等待前面的request处理完之后再处理当前的request, 此过程有连接池循环从等待队列中取request完成。当取出了request之后, 需要从连接池中挑选空闲的链接, 由此链接把request请求发送出去, 并准备接收数据, 接收完数据把数据通过response返回给用户, 并把链接归还给连接池。如果在连接池中挑选链接的时候没有空闲链接可用, 则检查连接池容量是否达到上限, 如果没有达到上限, 建立新的链接, 添加至连接池, 然后使用;否则, 等待并轮询, 直至连接池中有空闲的链接可用, 才处理request。在处理每个request的时候, 注意request的超时链接, 如果发现超时链接, 需要重置链接, 以避免等待队列阻塞。

从图2中可以看出, 多数据源的情况用到了NIO技术, 并且比图1中单数据源的情况要复杂得多, 为什么多数据源的情况不能用图1中的并发模式呢?这和多数据源的处理情况有紧密联系。单数据源的情况, 用图1的模式, 以及能处理足够多的并发情况, 而如果是多数据源的情况, 再用图1的模式, 则会有问题, 假如一个request需要从n个数据源获得数据, 每个数据源需要花费时间t, 如果用串行处理方式, 那么一个request的处理完需要n*t的时间, 如果通过多线程并行处理, 那么处理一个请求需要启动n个线程, 这两种情况对性能都有极大的影响, 是不可忍受的。好在在Java1.4版本中增加了NIO技术, 利用NIO技术可以高效地处理多数据源的并发请求, NIO可以配置非阻塞的Socket, 类似于Linux系统中的epool, 这样可以在一个request处理的过程中并发地向多个数据源请求数据, 而不需要阻塞地等等一个数据源返还数据之后再处理另一个数据源, 并且是在一个线程中完成, 只需要启动几个辅助线程即可。由图2中可以看出, 当有n个数据源的时候, 需要有相应的n个连接池, 每个连接池需要配置有多个连接, 类似于图1中所示的模式, 另外需要一个发送线程Sender和一个接收线程Receiver, 另外还需要一个监控连接池运行状态的监控线程Checker, 当一个request过来之后, request顺序地调用各个数据源的连接池请求相应数据源的数据, 把相关的数据仍给连接池之后不阻塞, 继续做其他的工作, 只需要把相关的操作register到连接池的selector即可, register到selector的操作一般是CONNECT和READ, 当连接建立完成后或者数据接收完成, selector可以挑选出完成了相应操作的连接, 进行处理, 这种机制可以保证程序一直处于忙碌状态, 而不会因为某个数据源的连接阻塞而导致整体性能的下降。

3 成熟的Java网络编程框架介绍

3.1 Apache Mina

Apache Mina是一个基于Java NIO的一个网络编程应用框架, 使用Mina可以非常快速方便地开发出高并发及扩展性好的网络应用程序。目前Apache Mina在有多个版本, 最新的版本已经出到2.3, Apache Mina既提供了对Client的封装, 也提供了对Server的封装, 使用Mina无论是用来开发客户端应用程序还是开发服务器端应用程序都非常便利。

Apache Mina将网络应用程序网络底层的应用程序与数据传输分开, 这样开发者变可以把主要精力放在应用程序的业务逻辑上, 而不用花很大精力处理繁琐复杂的底层逻辑。A-pache Mina也是基于NIO技术, 是一个非阻塞通信的网络编程框架, 但同时也支持阻塞方式的请求。Apache Mina最大的特点是底层网络通信逻辑与业务应用逻辑分离, 降低了程序的耦合性, 并且这是一个编程的趋势, 很多其他的应用框架页在朝着这个方向努力改进。Mina框架, 核心就是Io Server, Io Fiter, Io Session, Io Handler, 以及Io Future.它们在整个框架中扮演着重要的角色。其架构图如图3所示。

3.2 JBoss Netty

Netty是一个异步的网络通信框架, 它是事件驱动更多, 与mina一样, Netty也是基于NIO实现的, 同时封装了客户端和服务器端。

Netty编程框架由3个基本部分组成, 分别是Buffer、Channel、和E vent, Netty所有的上层特性都是建立在这3个基本组件之上。Netty借鉴吸收了多种协议的特点, 包括HTTP、SMTP、FTP等, 并且经过精心设计, 使得Netty在网络编程中表现的得心应手。

3.3 Mina和Netty比较

Mina和Netty两者都是非常优秀的网络应用框架, 通过学习以后, 都可以明显地提高网络编程的开发效率。它们不仅仅是对Java NIO简单的封装, 而是提供了一个可供开发者灵活使用的平台。开发者只需要把精力放在业务逻辑上, 而不需要去关系底层的网络协议如何实现, 两者都是在实践中经过全面测试的可靠的框架, 使用它们不仅可以节省大量的开发时间, 二期可以保证整个程序的稳定性和扩展性, 具体在使用中可以发现可定制的线程模型、过滤机制、自定义编码协议等特性使得编程不仅快速而且容易扩展。

Mina和Netty学习起来很简单, 想要快速搭建一个Mina和Netty的网络应用很容易, 但是要是将它们丰富的特性及强大的功能完全发挥出来却非常的难, 一方面不仅要有牢固的Java基础, 深入理解Java NIO的机制, 同时还要深入到框架本身, 认真分析阅读源代码, 才能真正理解运用整个框架。

Apache Mina和Netty虽然非常相似, 都是非常优秀的网络通信框架, 但他们也有各自的不同特点, Mina强在数据接收和传输性能上, 封装数据的程度较高, 同时拥有良好的Filter机制, 应用在主要业务是数据传输的服务器上比较好, 比如文件共享服务器、FTP服务器等。此外, Mina对Http协议的支持也很好, 借助A-pache平台, 可以在Web服务器上开发一些很好的网络应用。

Netty与Mina相比在访问性能上较有优势, 非常适合高并发的互联网应用, 比如社交网络类和新媒体之类的应用。

根据上面的比较, 在需要快速开发的小型互联网应用程序上, 选择Mina比较好。但在开发大型的网络服务器方面, Netty可能会表现出更好的性能。

4 结语

当今社会是个媒体高度发达的社会, 互联网越来越成为生活中的必需品, 各种新的应用层出不穷, 对于程序员来说, 快速迭代的要求越来越高, 推出产品的速度往往会决定产品的生死存亡, 在这种情况下, 需要尽一切可能加快开发速度, 不重复造轮子, 选择已有的成熟框架和模块, 对于IT从业人员来说是必须的。并且这也是Java的特性, 各种成熟的框架和API, 对于每个Java程序员来说都需要广泛地了解, 当有相关需求的时候可以做出正确的选择。

摘要:对当前的各种编程语言做了简介, 并且对Java NIO的原理及应用做了较为详细的探讨, 详细描述了Mina和Netty框架的特性及原理。

关键词:网络编程,NIO技术,Mina框架,Netty框架

参考文献

[1]岑贤道, 安常青.网络管理协议及应用开发[M].北京:清华大学出版社, 1998.

[2]沈兆阳.Java与XML数据库整合应用[M].北京:清华大学出版社, 2002.

[3]HARNEDY S.简单网络管理协议教程[M].张巍, 译.北京:电子工业出版社, 2000.

[4]SUBRAMAN IAN M.网络管理[M].王松, 译.北京:清华大学出版社, 2003.

[5]郭军.网络管理[M].北京:北京邮电大学出版社, 2001.

[6]MarkoBoger.Java与分布式系统 (德) [M].曹学军, 译.北京:机械工业出版社, 2003.

[7]认识网络管理和网管软件[EB/OL].http://www.99net.net/study/sets/1113124314.htm.

java编程平台的优势解析 篇9

关键词:java,编程,平台,优势

1 引言

计算机语言, 是计算机编程技术中最为核心的组成部分。不同的编程语言对应着不同的编程环境, 例如C语言就是有着C语言自己的编程环境。对于计算机语言的发展历程而言, 其最早的为汇编语言, 也是最为简单和基础的计算机语言。随着计算机语言的不断发展, 出现了功能与兼容性更强的C语言。C语言虽然功能强大, 但是却存在一定的缺陷。其语言的可读性和概括性不强。实现一个功能, 则需要非常繁杂的C语言代码。因此, 后来又出现了面向对象的程序设计语言, 就是C++。面向对象程序设计语言虽然能够解决C语言存在的弊端, 但是却无法实现跨平台的使用。因此, 在此基础上, 技术人员开发了java语言, java最大的优势就在于其能实现跨平台编程, 并能够囊括多个计算机语言的特点。本文将重点分析java语言的特点, 并分析其平台的优势。

2 Java语言简析

了解一个计算机语言平台的优势, 首先要对计算机语言进行彻底地了解。那么首先需要了解的就是java语言的概念及其发展的历史。

从其语言的类别上人事java, java是可以实现跨越平台的一种面向对象的程序设计语言, 开发之初, 存在java程序设计与java语言编译平台。其优势在于能够实现可跨越性以及很强的囊括性, 对于软件以及大型的游戏等的开发, 都有着非常良好的语言支持环境。其未来的发展前景广阔, 受到业内人士的普遍认可。

2.1 java编程语言的开发

为什么要开发java程序设计语言呢?纵观计算机语言的发展历史, 可以比较容易了解java程序设计语言出现的原因。计算机最初的应用是数学计算, 大规模的数学计算需要强大的数据计算机系统。具有强大计算能力的中央处理器, 也就是人们常说的CPU。而随着计算机的生活化普及化, 用户对于计算机的使用有着各种各样的需求。因此, 软件开始出现。最早的汇编语言, 就是计算机最为基础的语言。随后, 出现了最为经典的计算机语言——C语言。C语言可读性强, 并且覆盖面广泛, 具有强大的编译功能, 从而实现了计算机的软件革命。软件的发展越来越快, 开始逐渐超越了硬件的发展。随着人们要求的不断提高, C语言由于过于单一化, 无法适应于大规模的模块化编程。因此, 面向对象程序设计语言就应运而生。最早出现的就是C++面向对象程序设计语言, 其可以实现构造类, 并通过继承等方式, 进行大规模的编程。C++基本成为计算机的顶级高级语言, 承载着计算机的主要软件开发。但是, 在人们的生产和生活中, 操作系统开始不断推出。目前, 比较常用的有微软的windows操作系统, 苹果公司的ios操作系统, 还有就是用于软件开发的Linux操作系统。以往的计算机语言最大的弊端就在于, 计算机语言需要编译环境。也就是计算机语言要有编译平台, 才能实现软件的开发功能。但是, 计算机操作系统的多样化, 导致了C++这样的高级语言, 在不同操作系统下会出现bug, 从而影响软件开发。因此, 亟需一种能够可以跨越平台的一种计算机语言。所以, 在不断的开发过程中, java语言得以应用。Java不仅仅可以实现跨越平台, 更能够在一定程度上实现移植, 囊括了C语言以及C++等高级语言的特点。并且, java也具有面向对象的性质, 因此java可以用于大型的编程。以上就是java语言开发的历程, 因为有需求, 所以才应运而生。

2.2 java语言的以及java编译平台的主要优势分析

Java的语言的优势比较突出, 并且能够实现多种软件的开发和设计。从我们日常生活中, 就可以得以体现。例如, 大规模的游戏平台, 满足了人们对于游戏的渴望。其中多数游戏平台就是通过java编程实现的, 网页设计中也都需要使用java语言编译平台。其中使用java的主要原因在于, 第一是java的可移植性好。游戏一般都需要具有可移植性, 因此通过java进行编译, 对于游戏的效果体现更好一些。第二, 人们不断的追求方便快捷。游戏的平台也从计算机开始向手机发展, 从而让人们在使用手机的时候也能畅游游戏的乐趣。因此, java游戏是最先被人们熟知的。Java语言的可移植性, 从计算机到手机的转变, 就是对于java语言优势的最好诠释。

对于java的编译平台, 其优势的体现主要是在多元化方面。例如, 在进行软件开发的时候, 人们习惯了使用linu操作系统, Linux操作系统被称为是软件开发的基础平台。但是, 由于大多数人们比较习惯使用windows操作系统, 因此就会造成人们更习惯使用windows平台进行软件的开发与测试, 从而查找bug。如果采用C++等面向对象的程序语言, 虽然可以实现大规模编程以及软件开发等。但是, 从平台的移植上分析, C++的局限性太大。只能够活跃在windows操作系统中, 而脱离了操作系统, 其编辑环境就无法存在。对于java而言, 通过使用任何的操作系统进行编译, 都可以实现。并且, 在一定程度上java实现了编译的简易化。同样的软件效果, java需要进行编译的内容就非常简单, 而且容易理解。因此, 从其平台的优势角度分析, 可移植性占据了最大的优势, 并能够实现多平台的编译与测试。

java语言的以及java编译平台的主要优势, 集中体现在其能够囊括高级语言的优点, 并且能够克服其缺点, 从而达到高效编译的目的。

3 结语

Java作为计算机语言的一种, 能够建立在C语言以及C++的基础上发展起来, 足以证明java有着其语言的优势以及编译平台的优势。对于C语言以及C++而来, 两者虽然都是高级语言, 但是却都无法实现跨越平台。因为微软的windows系统应用过于广泛, 因此C语言以及C++的编译环境都是建立在windows操作系统下的。而大多数的软件开发平台都是Linux, 因此就造成了编译上的缺陷。此外, C语言和C++虽然都是高级语言, 但是其编译方法并不是最佳的。也就是其资源的利用上, 并不十分有效。而java语言能实现可移植的条件下, 囊括高级语言中面向对象的特点, 从而最大限度实现计算机语言的利用最大化。因此, java语言以及其编译平台最大的优势在于不仅仅能够实现高级语言的特性, 并且具有面向对象的特性, 从而可以实现大规模编程。最为重要的是, java可以跨越平台, 实现多平台编程。

参考文献

[1]张健康, 杨宜康, 李雪, 刘磊, 基于Java 3D的地球空间环境可视化研究[J], 计算机应用研究, 2013 (01) :211-214

[2]蓝雯飞, 李子茂, “Java程序设计”课程教学思考[J], 计算机时代, 2013 (01) :37-39

[3]田夏利, 李雄飞, Java框架对初级开发者的束缚及化解策略[J], 软件导刊, 2013 (01) :57-59

用JAVA编写网络通信程序 篇10

1 Java中输入/输出流概念

过滤流D a t a I n p u t S t r e a m和D a t a OutputStream除了分别作为FilterInput Stream和FilterOutputStream的子类外, 还分别实现了接口DataInput和DataOutput。接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组, 如writeChar () 、writeDouble () DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据, 用以实现一种独立于具体平台的输入方式。

2 Socket机制

S o c k e t是面向客户/服务器模型设计的, 网络上的两个程序通过一个双向的通讯连接实现数据的交换, 这个双向链路的一端称为一个Socket。

Socket通信机制提供了两种通讯方式:有联接和无联接方式, 分别面向不同的应用需求。使用有联接方式时, 通信链路提供了可靠的, 全双工的字节流服务。在该方式下, 通信双方不必创建一个联接过程和建立一条通讯链路, 网络通信操作在不同的主机和进程之间转发进行。

3 Java语言

Java语言优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。第一简单性。Java与C++语言非常相近, 但J a v a比C++简单, 它抛弃了C++中的一些不是绝对必要的功能, 如头文件、预处理文件、指针、结构、运算符重载、多重继承以及自动强迫同型。第二, 面向对象。J a v a提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法, 很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型, 通过继承和重载机制, 子类可以使用或重新定义父类或超类所提供的方法, 从而既实现了代码的复用, 又提供了一种动态的解决方案。第三, 多线程。Java程序可以有多个执行线程, 如可以让一个线程进行复杂的计算, 而让另一个线程与用户进行交互, 这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证了较高的执行效率。第四, 分布性。Java是面向网络的语言。通过它提供的类库可以处理T C P/I P协议, 用户可以通过U R L地址在网络上很方便的访问其他对象。第五, 体系结构中立。J a v a是一种网络语言, 为使J a v a程序能在网络的任何地方运行, J a v a解释器生成与体系结构无关的字节码结构的文件格式。J a v a为了做到结构中立, 除生成机器无关的字节码外, 还制定了完全统一的语言文本。第六, 安全性。用于网络、分布环境下的J a v a必须要防止病毒的入侵, J a v a不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现, 这样就防止了程序员使用欺骗手段访问对象的私有成员, 同时也避免了指针操作中容易产生的错误。

4 JAVA工具

JDK, Java编译器, Java编译器将Java源代码文件编译成可执行的J a v a字节码。Java源代码文件的扩展名为.java, Java编译器把这种扩展名的文件编译成扩展名为.class的文件。

Java解释器, Java解释器对编译生成的字节码格式的可执行程序的运行提供支持, 它是运行非图形J a v a程序的命令行工具。

Appletviewer, 它是Java Applet的简单测试工具, 可使用它来测试Java Applet程序, 而不需要W W W浏览器的支持。

Visual J++, Visual J++集成了可视化界面设计、交互式调试、代码编辑、联机帮助信息和介绍如何快速掌握该开发环境的实用向导等多项功能, 同时具有能充分利用Active X和COM新技术的优势。利用Visual J++可创建交互性很强的Internet应用程序, 是难得的J a v a开发系统。

5 客户机/服务器通信的实现

Application同Applet的通信。两端通过S o c k e t机制进行连接:第一客户端的编程流程:打开Socket, 新建一个套接字;为套接字建立一个输入和输出流;根据服务器协议从套接字读入或向套接字写入;清除套接字和输入/输出流;第二服务器端的编程流程:打开Server Socket, 创建一个服务器型套接字和一个普通套接字, 服务器型套接字在指定端口为客户端请求的Socket服务;使用ServerSocket类的accept () 方法使服务器型套接字处于监听状态并把监听结果返回给普通套接字;为该普通套接字创建输入和输出流;从输入和输出流中读入或写入字节流, 进行相应的处理, 并将结果返回给客户端;在客户端和服务器工作结束后关闭所有的对象, 如服务器型的套接字, 普通套接字, 输入和输出流。

Applet之间的通信:Applet之间的通信使用Applet Context类的getApplet () 方法。

只要在程序中加入Applet o n e a p p l e t=getAppletContext () .getApplet (“first”) ;便可使用name为first的Applet中的方法了。

6 程序调试心得

Java网络编程 篇11

关键词:计算机;软件开发;JAVA编程语言

中图分类号:TP311

JAVA是一种由C++语言发展而来,具有撰写跨平台软件能力的编程语言,虽然其编程模式与C++语言十分类似,但是,由于其在进行编程时,完全采用的是“以对象为导向”的方式,将源代码编译为二进制的字节码,并通过各种不同类型的虚拟机平台,对该字节码进行解释与执行,从而实现一次编译与到处执行的目标,因此,其与C++编程语言存在着巨大区别[1]。

1 JAVA编程语言特点

相对于其他计算机编程语言而言,例如,C++、C、VF、VC以及VB等,JAVA编程语言的突出特点主要表现为以下几点:(1)平台独立性。先编译中间码,再对其进行装载、校验以及解释,使其转变为机器码,从而促进程序的运行,该编程流程使JAVA能够突破操作平台的环境限制,从而适用于多种类型的操作平台系统中。(2)可移植性。JAVA编程语言能够借助网页站点,通过网络浏览器对JAVA应用程序(包括:HTML、图形以及图像等)进行自由阅读、下载以及使用等。(3)多线程。由于多线程机制又可最大限度的保证计算机应用程序能够正常运行而,JAVA编程语言具有较为成熟的同步源语,可有效确保共享数据操作的及时性、真实性以及准确性,因此,计算机软件人员只要能够正确把握及充分利用多线程机制,就能有效实现网络数据、信息的实时交互[2]。(4)面向对象。JAVA编程语言的面向对象是以应用程序为基础而建立的,具有一定继承性、封装性以及动态联编性等,使其能够在不改动其他编程模块的基础上,对某一模块进行局部调整,该特性不仅有利于提高编程效率,而且还有助于程序的后期管理与维护。(5)简单性。虽然C++编程语言具有极强的运算符重载及继承功能,但是,由于该功能的实用性不强,且极易被混淆,为计算机软件开发者带来极大的工作阻碍,而JAVA编程语言除了对C++编程语言进行取其精华去其糟粕处理外,还添加了自动采集并清除垃圾数据的功能,为软件开发者提供了诸多便利同时,也有效降低了计算机软件在开发过程中的内存占用率,因此,诸多软件开发者均以JAVA编程语言作为主要编程语法[3]。

2 计算机软件开发中应用到的JAVA编程语言技术

2.1 JAVA Database Connectivity技术

JAVA Database Connectivity技术(JDBC)是一项数据库连接技术,而快速且有效实现对多种数据的统一访问,为数据库创建链接平台则是其主要目的。将JAVA Database Connectivity技术应用于计算机软件开发中,可实现计算机数据库与相关数据的链接,在为PC软件的开发提供可靠的数据查询的同时,还为后台数据库的管理工作提供便利;此外,其还能为计算机程序提供统一的接口和抽象类,从而实现对更高级、更复杂数据的处理与管理。

2.2 JAVA Annotation技术

Annotation是一种隶属JAVA编程语言的元素数据语法,而正确处理好JAVA编程语言中各属性、参数以及变量等要素间的关系是JAVA Annotation技术的主要目的。将JAVA Annotation技术应用于计算机软件中,能够让计算机用户可以从元素属性与特点等方面入手,对JAVA编程语言中的各属性、参数以及变量进行有效链接与整合;此外,由于JAVA Annotation技术中的Java Beans技术是一个独立于开发平台外的控件体系,具有极高的一致性与安全性,因此,其可为程序开发人员提供某些程序之外的相关数据,例如,计算机软件开发人员在进行代码编写时,可通过向编译器下达特殊的禁止指令而阻止某些错误数据的运行,并对该错误数据进行解读与分析等[4]。

2.3 JAVA Remote Method Invocation技术

保证程序的正常运行,并通过调试与充分应用JAVA中的对象与类,实现分布式应用程序的管理是JAVA Remote Method Invocation技术的主要作用,将其应用于计算机软件开发中,除了能够对数据资源进行有效整合外,还可对小型分布式程序的运行起到一定调试作用,从而有效保证所运行程序的完整性、稳定性以及安全性。

3 计算机软件开发中JAVA编程语言的应用

由于JAVA编程语言具有诸多其他编程语言所没有的特点与优势,因此,其被广泛应用于计算机软件开发中,具体体现在以下方面:

首先,利用JAVA编程语言的可移植性特点,增强游戏的整体效果。随着我国经济水平的不断提高及社会的不断进步,人們在追求并享受高质量生活的同时,也对当下生活环境与条件提出了更高的要求,尤其是在休闲娱乐方面,因此,各式各样的JAVA游戏平台于计算机领域中应运而生,并逐渐突破计算机操作平台系统的限制,转移至手机中,使用户能够更方便、快捷的享受玩游戏的乐趣,也正因为如此,JAVA游戏成了人们最为熟知的手机游戏之一。其次,利用JAVA编程语言适用于各种操作平台系统的优势,将其作为计算机软件设计、开发及测试的主要编程语言。目前,由于在日常工作及生活中,大部分计算机使用者均以使用Windows操作系统为主,因此,很多计算机软件开发人员在进行软件设计、开发及测试时,均倾向于以Windows操作系统作为基础平台,虽然在此操作平台上,C++编程语言依然可以进行大规模的软件编程与开发,但是,当将其进行平台移植,使其脱离该操作系统平台时,其编辑环境将无法存在,从而导致程序无法正常运行,而JAVA编程语言却可打破此局限性,并实现编译工作的简易化与跨平台编译。再次,利用JAVA编程语言的多线程与面向对象特点,通过设计动态画面,包括调用图像与图形等,或载入声音,并编写相应的JAVA程序代码,从而使JAVA程序更富有生动性与形象性。最后,利用JAVA编程语言还可设计出具有交互操作特征的应用程序,主要包括定向交互、选择交互以及控制流程等。此外,随着我国计算机技术水平的不断提升,JAVA编程语言还被广泛应用于互联网系统管理功能模块设计、企业内部网软件开发与应用以及多媒体信息处理中,具有广阔的应用前景及发展前景。

4 结束语

随着我国经济水平及计算机技术水平的不断提高,近年来,适用于各种操作平台系统的JAVA编程语言已逐渐由PC平台向手机智能平台转移,并得到了较为良好的发展,这对我国IT行业而言,具有十分重要的发展意义。

参考文献:

[1]李健周.关于计算机软件开发的JAVA编程语言研究[J].信息通讯,2013(10):89-90.

[2]祝谨惠.计算机软件开发的JAVA编程语言特点分析[J].数字技术与应用,2013(04):208-209.

[3]王晶晶.基于计算机软件开发的JAVA编程语言分析[J].河南科技,2013(14):133-134.

[4]陈颜颜.基于计算机软件开发的JAVA编程语言分析[J].计算机光盘软件与应用,2013(22):250-152.

八人过河问题的Java编程实现 篇12

过河问题是一个非常有趣的智力游戏,许多学者都对这类问题进行了深入研究。王国全[1]对其中的商人过河问题进行了分析并用Java程序来解决此类问题。张念发等[2]将经典的商人过河问题进行了泛化讨论,并在此基础上着重分析了安全渡河问题的状态空间,建立了满足问题需求的渡河规则,研究了相应的控制策略,得出了求解路径的搜索规则和搜索策略,给出了基于状态空间搜索法的问题解决方案。然而,王国全和张念发等方案无法解决八人过河问题,该过河问题描述如下:现有一条河,总共有8个人要过河,他们分别是妈妈、爸爸、两个儿子、两个女儿,一位犯人和一位警察。现有一条小木船,该船一次最多只能搭载两个人;在这8人当中,只有爸爸、妈妈、警察会开船,即这个船上必须有爸爸、妈妈,警察3个中的一个,船才会开动。船过去无法自动回来。并且要避免以下3件事发生:(1)如果警察不在,犯人就会伤害一家6口;(2)如果爸爸不在,妈妈就会伤害儿子。(3)妈妈不在,爸爸会伤害女儿。应当如何过河?

此外,还有农夫过河问题:一位农夫带着一只羊、一只狼和一棵白菜,身处河南岸边。他要把这些东西全都运送到对岸。他面前只有一条小船,船只能容下他和一件物品,另外只有农夫才能撑船。如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊,羊会吃白菜,所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不吃白菜。请给出农夫将所有的东西运过河的方案。

其实,这两个问题类似,只要解决了其中一个问题,另外一个问题自然就会被解决。所以,重点讨论八人过河问题。

2问题分析

八人过河问题可以看成二元组节点<S1,S2>状态变化过程。其中S1,S2是集合,分别代表着河岸以及河对岸的人员集合。由于集合的元素不能重复,所以二个儿子可分别用儿子1,儿子2来表示。同理,二个女儿可以分别用女儿1,女儿2来表示。设坐船Boat的人员集合是C,在过河过程中,这些人通过坐小船在河两岸来回,二元组节点的值则必然发生改变。

所以,一次过河或返回策略可以用下面公式表示:

设Boat船上的人员集合是C。如果集合C中规定的人员过河时,则S1’=S1-C,S2’=C+S2;当集合C中规定的人员返回时,则S1’=S1+C,S2’=S2-C。而且新集合S1’、S2’应该遵循安全规则,即要避免以下3件事发生:(1)如果警察不在,犯人就会伤害一家六口;(2)如果爸爸不在,妈妈就会伤害儿子。(3)妈妈不在,爸爸会伤害女儿。

另外当由节点<S1,S2>变迁到新节点<S1’,S2'>后,则Boat的航行方向跟原来的航行方向相反。

在过河之前,此时二元组节点的初始值vfirst是<{爸爸,妈妈,儿子1,儿子2,女儿1,女儿2,警察,犯人},{}>;而所有人都过河了,则二元组变成了最终值VLast,即为<{},{爸爸,妈妈,儿子1,儿子2,女儿1,女儿2,警察,犯人}>。要得到过河方案,即要找到由开始二元组节点v_first,经过若干次过河或返回后,最后变迁到结束二元组节点VLast,便结束。待结束后,依次输出节点变迁过程中船Boat的行为(即船上人员集合过河或返回),就是过河方案。

而为了更有效地从一节点变迁到下一节点,采用有效回溯算法:即根据当前船的信息,为每一个节点保存过河或返回的所有有效的坐船人员候选集合,如果所选择的集合不是有效的,则从该节点的候选集合中删除掉该集合。例如,对于初始节点v_first,如果过河的话,该节点的坐船人员候选集合是{{爸爸,妈妈},{爸爸,儿子1},{爸爸,儿子2},{妈妈,女儿1},{妈妈,女儿2},{警察,犯人}}。如果选择{爸爸,妈妈}集合坐船过河,得到新节点<{儿子1,儿子2,女儿1,女儿2,警察,犯人},{爸爸,妈妈}>,随后,如果{爸爸,妈妈}返回,则又得到了初始节点vfirst;另外,如果爸爸或妈妈中的一人返回,得到的新节点不安全。所以,回溯到节点vfirst,并从节点vfirst的有效过河候选集合中删除掉集合{爸爸,妈妈}。然后,重新选择新的候选集合,并变迁到其他的节点,重复循环这种操作,直到得到的新节点时是结束节点VLast,就结束。在此算法中,利用栈来保存每个节点以及相应的坐船人员候选集合。八人过河问题的流程图如图1所示。其中图2是图1中处理候选集合list不为空情况的细化部分。

3编程实现

在程序中定义的类有:集合类CSet、船类Boat、安全规则类Rule、节点类Node、节点候选集合类Node Edges以及方案类Scheme。

3.1集合类CSet

该类提供了多种方法,主要提供了集合的加减运算以及产生子集等功能。

集合类CSet中的主要方法有:

方法public void Add(CSet s):当前集合加集合s,结果保存到当前集合中。

方法public void subtract(CSet s):当前集合减法集合s,结果保存到当前集合中。

方法public boolean Is Same Of Content(CSet s):比较当前集合与指定集合s的内容是否相同,如果相同,返回true,否则返回false.

方法public Hash Set<Hash Set<String>>get Sub Set Of Length(int start Length,int end Length)功能:得到当前集合的子集的集合,且子集中的元素(集合)的长度大于等于start Length,而小于等于end Len。例如,对于集合{a,b,c},如果start Length=2,end Len=3,则产生的集合是:{{a,b},{a,c},{b,c},{a,b,c}}。

方法public Hash Set<Hash Set<String>>get Sub Set()功能:得到当前集合的所有子集,对于集合{a,b,c},则产生的所有子集的集合是:{{},{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}}。

方法public Array List Get List Of Boat People Set(Boat boat,Rule rules[])功能:依据船boat的有关信息和安全规则rules,从当前集合中选出坐船人员集合的列表(在保证当前集合和船都安全的情况下)。其中,返回Array List类型值的元素是CSet类型。例如,如果河岸人员集合是{妈妈,女儿1,儿子2,爸爸,女儿2},而对岸人员集合是{犯人,警察,儿子1},若boat的方向是过河,则有效坐船人员集合的列表是:{爸爸,儿子2}-{爸爸,妈妈},注意,不能包括{妈妈,女儿1},{妈妈,女儿2};若boat的方向是返回,则坐船人员集合的列表则是:{警察,犯人}-{警察,儿子1},注意,不能包括{警察}。

方法boolean Is Safe(Rule r[])功能:依据安全规则(由数组r规定),判断当前集合set是否安全,如果安全则返回true,否则返回false。当前集合中存在害人者,和受害者,但没有相应的控制者时,这种情况就不安全。

3.2 Boat类

该类主要是对过河所需要的船进行了定义。有关船的信息包括:船方向、坐船人员集合、船载人数量以及规定的水手。

集合类CSet中的主要方法有:

方法public boolean Is Over Load()功能:判断船是否超载,如果超载返回true,否则返回false.

方法public void On Boat(CSet s)功能:指定坐船人员集合s坐船。

方法public CSet Off Boat()功能:船上人员下船,并返回下船人员集合。

方法public boolean Is Safe()功能:判断船是否安全:是否超载,以及是否存在指定水手人员。如果超载或者没有指定的水手人员,则返回false(船不安全);如果安全且存在指定水手人员则返回true(表示船安全).

3.3 Rule类

该类是是定义安全规则,规则控制者、害人者以及受害者集合。如果控制者不在现场的话,害人者与受害者在一起的话,则害人者会伤害受害者。例如,如果警察不在,犯人就会伤害一家6口,警察是控制者,犯人是害人者,而集合{爸爸,妈妈,儿子1,儿子2,女儿1,女儿2}是受害者集合。

3.4 Node类

该类是对河岸以及对岸人员集合,所用到的船以及两岸人员集合应该遵循的若干安全规则进行了定义。

Node类中有如下主要方法:

方法public Node get Next Node(CSet set)功能:依据节点中船信息和安全规则,从河岸或对岸的当前集合中选出坐船人集合的列表(在保证当前集合和船都安全的情况下),产生新节点并返回新节点。

方法public Array List Get List Of Boat People Set()功能:依据当前节点船的方向,得到合法的坐船人员集合列表。

方法public boolean Is Safe()功能:判断当前节点是否安全(即判断河岸以及对岸人员集合是否安全),如果安全则返回true,否则返回false。

方法public boolean Is Same Node Of Content(Node n)功能:当前节点是否与指定节点(n)内容(包括船的方向)相同时,内容相同返回true,否则返回false

方法public boolean Is Same Node Of Content1(Node n)功能:判断当前节点是否跟指定节点n的河岸以及河对岸人员是否是相等的。不包括船的方向。

3.5 Node Edges类

由于下面Scheme类的方法Deal With(),采用了有效回溯法,Node Edges类主要作用是为了保存节点的有效的坐船人员候选集合。

3.6 Scheme类

该类规则了过河游戏的开始节点和结束节点。其中方法Deal With()是得到过河方案的主要算法。方法Scheme1()解决了八人过河问题,而方法Scheme2()则是处理农夫过河问题。

Scheme类主要方法有:

方法public boolean Is Exist In Stack(Stack stack,Node node)功能:判断指定节点node是否与栈stack中节点内容相同,如果相同的话,则返回true,否则返回false。

方法public int Best Index In List(Array List list,int direction)功能:船过河时(即direction的值为Boat.PASSRIVER),从候选集合列表中随机选择一个元素的下标返回,船返回时(即direction的值为Boat.BACK),优先选择那些元素个数最小的下标返回。比如:对于列表{a,b}-{a,c}-{b,c}-{a}-{b,c},当船过河时,返回0到4范围内的随机值。当船返回时,则返回3值,因为集合{a}的元素个数最小。

方法public void Deal With()功能:得到过河方案,保持在栈stack中,然后输出栈中内容(即过河方案)。其具体情况如下:

方法public static void Scheme1()功能:得到八人过河游戏方案。

方法public static void Scheme2()功能:农夫过河问题。

3.7程序运行情况

在Scheme类中,方法scheme1()得到了八人过河方案,而scheme2()得到了农夫过河方案,运行Scheme类的main()方法,运行结果如下:

八人过河方案:

步骤(1):{犯人,警察}过河

步骤(2):{警察}返航

步骤(3):{警察,儿子1}过河

步骤(4):{犯人,警察}返航

步骤(5):{儿子2,爸爸}过河

步骤(6):{爸爸}返航

步骤(7):{妈妈,爸爸}过河

步骤(8):{妈妈}返航

步骤(9):{犯人,警察}过河

步骤(10):{爸爸}返航

步骤(11):{妈妈,爸爸}过河

步骤(12):{妈妈}返航

步骤(13):{妈妈,女儿2}过河

步骤(14):{犯人,警察}返航

步骤(15):{警察,女儿1}过河

步骤(16):{警察}返航

步骤(17):{犯人,警察}过河

一个农夫带着一只狼、一只羊和一棵白菜过河方案:

步骤(1):{农夫,羊}过河

步骤(2):{农夫}返航

步骤(3):{白菜,农夫}过河

步骤(4):{农夫,羊}返航

步骤(5):{农夫,狼}过河

步骤(6):{农夫}返航

步骤(7):{农夫,羊}过河

摘要:针对八人过河问题,设计了一种有效回溯算法,Java编程实现了八人过河的过河方案,同时,该算法亦可以得到农夫过河问题的过河方案,并给出有效的Java程序来解决此类过河问题。

关键词:八人过河问题,农夫过河问题,回溯法

参考文献

[1]王国全.商人过河问题的Java实现[J].电脑编程技巧与维护,2009,(05),25-27.

[2]张念发,张宪新,刘长征.基于状态空间搜索法的商人过河问题解决方案[J].电脑编程技巧与维护,2010,(18):36-38.

上一篇:设备测试下一篇:局限性多媒体教学