论文部分内容阅读
摘要:java.net中包含了网络通信所需要的类,文中主要阐述了使用JAVA编程语言对基于客户/服务器模式的应用编写网络通信程序,讨论了SOCKET机制的原理,重点介绍Java中输入输出流的概念以及程序实现代码。
关键词:JAVA;网络;SOCKET;APPLET
中图法分类号:TP311文献标识码:A文章编号:1009-3044(2008)08-10ppp-0c
网络上的系统结构多为客户/服务器模式,服务器端负责数据和图像等的存储、维护、管理以及传递,客户端则负责人机界面的操作、送出需求及显示收回的数据。
1 Java中输入/输出流概念:
Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。主要体现在Java实现了自动的垃圾收集,简化了内存管理的工作;提供了简单的类机制和动态的构架模型;多线程使应用程序可以同时进行不同的操作,处理不同的事件;是一种面向网络的语言,Java程序能在网络的任何地方运行,且可防止病毒的入侵。
过滤流DataInputStream 和DataOutputStream 除了分别作为FilterInputStream和FilterOutputStream的子类外,还分别实现了接口DataInput 和DataOutput。接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()、readInt()、readLine()、等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble()、DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream可以向所连接的输出流写入基本类型的数据。
2 Socket机制
Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求。
3 客户机/服务器通信的实现:
两端通过Socket机制进行连接来实现Application 同 Applet 的通信:正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,就象在本地文件系统中一样。才能实现Applet之间的通信: Applet之间的通信使用Applet Context类的getApplet()方法。<applet code=applet1.class width=200 height=200 name=first>只要在程序中加入Applet oneapplet=getAppletContext().getApplet(“first”);便可使用name为first的Applet中的方法了。
程序如下: import java.io.*; import java.net.*; import java.lang.*; import T2;
class ThreadEchoHandler extends Thread //创建线程
{ T2 theT2=new T2();Socket incoming; int counter;
ThreadEchoHandler(Socket i,int c) { incoming=i; counter=c; }
public void run()
{try {DataInputStream in=new DataInputStream(incoming.getInputStream());
DataOutputStream out=new ; DataOutputStream(incoming.getOutputStream());
System.out.println ("hello"); boolean done=false;
while(!done) { String aa=""; String str=in.readUTF();System.out.println (str);
theT2.pass(str); theT2.tongji();aa=theT2.guan();
System.out.println ("string z is:" aa);
if(aa.compareTo("null")!=0 )
{ out.writeUTF(aa); out.flush();}} incoming.close();}
catch(IOException e){System.out.println(e);}}}
class S { public static void main(String[] args)
{ int i=1; ry { ServerSocket s=new ServerSocket(1111); for(;;)
{ Socket incoming=s.accept();System.out.println("connect: " i);
new ThreadEchoHandler(incoming,i).start(); i ; }}
catch(Exception e) { System.out.println(e); } }}
import java.io.*; import java.net.*; import java.awt.*; import java.applet.*;
public class Echo extends Applet
{ TextArea ta; Socket echoSocket; DataOutputStream os;
DataInputStream is; String Line; public void init()
{ setBackground(Color.white); ta=new TextArea(5,80); ta.setEditable(false); add(ta);
try {echoSocket=new Socket("10.102.4.41",1111);} //与服务器建立连接
catch(IOException e) {System.out.println("error"); }}
public void st(String stri) { try { DataOutputStream os=new
DataOutputStream(echoSocket.getOutputStream());
DataInputStream is=new DataInputStream(echoSocket.getInputStream());
os.writeUTF("" stri ); os.flush();}//向服务器输送string
catch(IOException e) {System.out.println(" error:" e); }}
public String st1() //接收字符串的方法
{String Line=""; try { DataOutputStream os=new
DataOutputStream(echoSocket.getOutputStream());
DataInputStream is=new DataInputStream(echoSocket.getInputStream());
Line=is.readUTF();ta.appendText("" Line); }
catch(IOException e) {System.out.println(" error:" e); } return Line; }}
4 结束语
用JAVA实现网络通信程序 时,在建立Socket连接时,两端的端口号必须设为一致,否则建立不了连接。服务器端必须有主机IP地址或主机名参数。连接建立好之后应确定输入和输出流,如果一个使用某端口的程序没有关闭,另一个程序就不能使用这个端口。
参考文献:
[1]廖雷,等.Java程序设计教程[M].中国电力出版社,2003.
[2]徐迎晓.Java语法及网络应用设计[M].清华大学出版社,2002.
[3]谢志华.深入Java Servlet网络编程[M].西安:西安电子科技大学出版社,2001.
关键词:JAVA;网络;SOCKET;APPLET
中图法分类号:TP311文献标识码:A文章编号:1009-3044(2008)08-10ppp-0c
网络上的系统结构多为客户/服务器模式,服务器端负责数据和图像等的存储、维护、管理以及传递,客户端则负责人机界面的操作、送出需求及显示收回的数据。
1 Java中输入/输出流概念:
Java语言的优点主要表现在:简单、面向对象、多线程、分布性、体系结构中立、安全性等方面。主要体现在Java实现了自动的垃圾收集,简化了内存管理的工作;提供了简单的类机制和动态的构架模型;多线程使应用程序可以同时进行不同的操作,处理不同的事件;是一种面向网络的语言,Java程序能在网络的任何地方运行,且可防止病毒的入侵。
过滤流DataInputStream 和DataOutputStream 除了分别作为FilterInputStream和FilterOutputStream的子类外,还分别实现了接口DataInput 和DataOutput。接口DataInput中定义的方法主要包括从流中读取基本类型的数据、读取一行数据、或者读取指定长度的字节数,如readBoolean()、readInt()、readLine()、等。接口DataOutput中定义的方法主要是向流中写入基本类型的数据或者写入一定长度的字节数组,如writeChar()、writeDouble()、DataInputStream可以从所连接的输入流中读取与机器无关的基本类型数据,用以实现一种独立于具体平台的输入方式;DataInputStream可以向所连接的输出流写入基本类型的数据。
2 Socket机制
Socket是面向客户/服务器模型设计的,网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket。Socket通常用来实现客户方和服务方的连接。客户程序可以向Socket写请求,服务器将处理此请求,然后通过Socket将结果返回给用户。Socket通信机制提供了两种通讯方式:有联接和无联接方式,分别面向不同的应用需求。
3 客户机/服务器通信的实现:
两端通过Socket机制进行连接来实现Application 同 Applet 的通信:正是由于Java系统具有基于Socket的灵活通信机制,因而其应用程序能自由地打开和访问网络上的对象,就象在本地文件系统中一样。才能实现Applet之间的通信: Applet之间的通信使用Applet Context类的getApplet()方法。<applet code=applet1.class width=200 height=200 name=first>只要在程序中加入Applet oneapplet=getAppletContext().getApplet(“first”);便可使用name为first的Applet中的方法了。
程序如下: import java.io.*; import java.net.*; import java.lang.*; import T2;
class ThreadEchoHandler extends Thread //创建线程
{ T2 theT2=new T2();Socket incoming; int counter;
ThreadEchoHandler(Socket i,int c) { incoming=i; counter=c; }
public void run()
{try {DataInputStream in=new DataInputStream(incoming.getInputStream());
DataOutputStream out=new ; DataOutputStream(incoming.getOutputStream());
System.out.println ("hello"); boolean done=false;
while(!done) { String aa=""; String str=in.readUTF();System.out.println (str);
theT2.pass(str); theT2.tongji();aa=theT2.guan();
System.out.println ("string z is:" aa);
if(aa.compareTo("null")!=0 )
{ out.writeUTF(aa); out.flush();}} incoming.close();}
catch(IOException e){System.out.println(e);}}}
class S { public static void main(String[] args)
{ int i=1; ry { ServerSocket s=new ServerSocket(1111); for(;;)
{ Socket incoming=s.accept();System.out.println("connect: " i);
new ThreadEchoHandler(incoming,i).start(); i ; }}
catch(Exception e) { System.out.println(e); } }}
import java.io.*; import java.net.*; import java.awt.*; import java.applet.*;
public class Echo extends Applet
{ TextArea ta; Socket echoSocket; DataOutputStream os;
DataInputStream is; String Line; public void init()
{ setBackground(Color.white); ta=new TextArea(5,80); ta.setEditable(false); add(ta);
try {echoSocket=new Socket("10.102.4.41",1111);} //与服务器建立连接
catch(IOException e) {System.out.println("error"); }}
public void st(String stri) { try { DataOutputStream os=new
DataOutputStream(echoSocket.getOutputStream());
DataInputStream is=new DataInputStream(echoSocket.getInputStream());
os.writeUTF("" stri ); os.flush();}//向服务器输送string
catch(IOException e) {System.out.println(" error:" e); }}
public String st1() //接收字符串的方法
{String Line=""; try { DataOutputStream os=new
DataOutputStream(echoSocket.getOutputStream());
DataInputStream is=new DataInputStream(echoSocket.getInputStream());
Line=is.readUTF();ta.appendText("" Line); }
catch(IOException e) {System.out.println(" error:" e); } return Line; }}
4 结束语
用JAVA实现网络通信程序 时,在建立Socket连接时,两端的端口号必须设为一致,否则建立不了连接。服务器端必须有主机IP地址或主机名参数。连接建立好之后应确定输入和输出流,如果一个使用某端口的程序没有关闭,另一个程序就不能使用这个端口。
参考文献:
[1]廖雷,等.Java程序设计教程[M].中国电力出版社,2003.
[2]徐迎晓.Java语法及网络应用设计[M].清华大学出版社,2002.
[3]谢志华.深入Java Servlet网络编程[M].西安:西安电子科技大学出版社,2001.