论文部分内容阅读
引言:本文主要简要介绍如何使用JAVA语言进行编程实现计算机网络通信协议要求的各项具体功能,使用JAVA语言编程完成计算机网络底层通信协议,是JAVA网络编程不可或缺的组成部分。
Java语言具有平台无关特性、安全机制、高可靠性和内嵌的网络支持,使之成为当前编写网路应用程序的首选工具之一。网络应用的核心思想是联入网络的不同计算机能够跨越空间协同工作,这首先要求它们之间能够准确、迅速的传递信息,在Java中这些信息是以数据流的方式传送的。网络通信协议种类繁多,我这里主要讨论TCP/IP协议的,Java编程实现。
一、使用连接的流式socket (套接字)
套接字(Socket)作为编程接口,应用于TCP/IP的协议传输层,利用JAVA语言中Socket提供的一组应用程序编程接口(API)就可以编程实现TCP/IP协议的传输层连接。
(一)InetAddress類
InetAddress类是Java语言网络编程中比较常用的类,它能够区分计算机网络中的不同节点,所有InetAddress对象都包含网络IP地址、计算机主机名称等信息,通过该对象获取相关信息。语句如下:
InetAddress ipa= InetAddress.getByName(args[0]); //利用主机名创建对象
System.out.println(“Host name:”+ipa.getHostName()); //获取主机名
System.out.println(“Host IP Address:”+ipa.toString()); //获取IP地址
(二)流式套接字的通信原理
流式套接字实现的通信是基于连接的通信,分三步完成:
1.通信开始前,确认通信双方身份并创建专用的虚拟连接通道;2.传输数据;3.通信结束删除连接。如图所示:
这种通信由于始终保持连接,从而保证了通信的实时性和准确性,然而建立连接和删除连接的过程使程序的复杂度有了一定的提高,由于实时要求性高连接始终被保持,这样使系统的内存等资源存在一定的浪费,所以只适用于不间断的通信,如实时通信软件,而对于一些间断的服务的或实时性要求较低的通信,则可以使用无连接的数据报方式。
(三)实现流式Socket通信的Client端编程
public class MySockerServer
{
public static void main(String[] args)
{
ServerService MySe=new ServerService(8000,10); //创建服务对象,进行监听服务
}
}
class ServiceThreak extends Frame implements Runnable
{//当客户端请求生成,服务器建立Frame用于数据交互
ServerService Listener; //创建通信线程的listener对象
Socket Client; //创建Socket对象,负责本线程的C/S通信
Threak Threak; //创建线程用于通信
Panel Listener; //创建窗口,用于显示通信中服务端的相关数据
TextArea SeMeg; //创建文本区,显示相关数据
public ServiceThreak(ServerService v,Socket s) //构造函数
{
}
public void runner() //子线程任务,完成与客户端的传输
{
try{
DataInputStream indata=new DataInputStream( //取得从客户端输入的数据流
new BufferedInputStream(ConnectedClient.getInputStream()));
PrintStream outdata=new PrintStream(//输出对象,完成数据流输出到客户端操作
new BufferedOutputStream(ConnectedClient.getOutStream()));
output.flush(); //输出信息到客户端
String str=input.readLine(); // 字符串存储客户端输入信息
while (!str.equals(“BYE!”))
{
str=input.readLine(); //字符串str中存储客户端输入的下一行数据
}
connectdeClient.close(); //当从客户端输入“BYE!”结束循环,即通信结束
catch(Exception e){}
Listener.addMeg(“客户端关闭”+”\n”);
Dispose(); //断开通信
}
}
二、无连接的数据报(UDP)
流式套接字(Socket)用于完成不间断的连接,可靠性和准确性高,同样存在资源浪费问题,如网络资源和计算机系统资源,所以在对时间和准确性要求较低的应用中,如收发电子邮件,可采用无连接的数据报方式(UDP)。
UDP是与Socket相反的连接,它的协议是不需要连接的,通过UDP直接发送数据包,UDP只适用于数据量较少的传输需求、并且对时间和可靠性要求较低的应用。由于UDP协议没不存在的过程,使他的传输效率较高;也正因为这个原因,它的可靠性不如流式套接字(Socket)高。腾讯QQ就是使用UDP收发信息典型案例,所以用户就会遇到信息丢失的情况。
参考文献
[1]朱喜福,徐剑魁.Java程序设计[M].清华大学出版社,2010.
[2]辛运帏,饶一梅.Java语言程序设计[M].人民邮电出版社,2009.
[3]刘永华.Java网络编程技术[M].清华大学出版社,2008.
(作者单位:天津交通职业学院)
Java语言具有平台无关特性、安全机制、高可靠性和内嵌的网络支持,使之成为当前编写网路应用程序的首选工具之一。网络应用的核心思想是联入网络的不同计算机能够跨越空间协同工作,这首先要求它们之间能够准确、迅速的传递信息,在Java中这些信息是以数据流的方式传送的。网络通信协议种类繁多,我这里主要讨论TCP/IP协议的,Java编程实现。
一、使用连接的流式socket (套接字)
套接字(Socket)作为编程接口,应用于TCP/IP的协议传输层,利用JAVA语言中Socket提供的一组应用程序编程接口(API)就可以编程实现TCP/IP协议的传输层连接。
(一)InetAddress類
InetAddress类是Java语言网络编程中比较常用的类,它能够区分计算机网络中的不同节点,所有InetAddress对象都包含网络IP地址、计算机主机名称等信息,通过该对象获取相关信息。语句如下:
InetAddress ipa= InetAddress.getByName(args[0]); //利用主机名创建对象
System.out.println(“Host name:”+ipa.getHostName()); //获取主机名
System.out.println(“Host IP Address:”+ipa.toString()); //获取IP地址
(二)流式套接字的通信原理
流式套接字实现的通信是基于连接的通信,分三步完成:
1.通信开始前,确认通信双方身份并创建专用的虚拟连接通道;2.传输数据;3.通信结束删除连接。如图所示:
这种通信由于始终保持连接,从而保证了通信的实时性和准确性,然而建立连接和删除连接的过程使程序的复杂度有了一定的提高,由于实时要求性高连接始终被保持,这样使系统的内存等资源存在一定的浪费,所以只适用于不间断的通信,如实时通信软件,而对于一些间断的服务的或实时性要求较低的通信,则可以使用无连接的数据报方式。
(三)实现流式Socket通信的Client端编程
public class MySockerServer
{
public static void main(String[] args)
{
ServerService MySe=new ServerService(8000,10); //创建服务对象,进行监听服务
}
}
class ServiceThreak extends Frame implements Runnable
{//当客户端请求生成,服务器建立Frame用于数据交互
ServerService Listener; //创建通信线程的listener对象
Socket Client; //创建Socket对象,负责本线程的C/S通信
Threak Threak; //创建线程用于通信
Panel Listener; //创建窗口,用于显示通信中服务端的相关数据
TextArea SeMeg; //创建文本区,显示相关数据
public ServiceThreak(ServerService v,Socket s) //构造函数
{
}
public void runner() //子线程任务,完成与客户端的传输
{
try{
DataInputStream indata=new DataInputStream( //取得从客户端输入的数据流
new BufferedInputStream(ConnectedClient.getInputStream()));
PrintStream outdata=new PrintStream(//输出对象,完成数据流输出到客户端操作
new BufferedOutputStream(ConnectedClient.getOutStream()));
output.flush(); //输出信息到客户端
String str=input.readLine(); // 字符串存储客户端输入信息
while (!str.equals(“BYE!”))
{
str=input.readLine(); //字符串str中存储客户端输入的下一行数据
}
connectdeClient.close(); //当从客户端输入“BYE!”结束循环,即通信结束
catch(Exception e){}
Listener.addMeg(“客户端关闭”+”\n”);
Dispose(); //断开通信
}
}
二、无连接的数据报(UDP)
流式套接字(Socket)用于完成不间断的连接,可靠性和准确性高,同样存在资源浪费问题,如网络资源和计算机系统资源,所以在对时间和准确性要求较低的应用中,如收发电子邮件,可采用无连接的数据报方式(UDP)。
UDP是与Socket相反的连接,它的协议是不需要连接的,通过UDP直接发送数据包,UDP只适用于数据量较少的传输需求、并且对时间和可靠性要求较低的应用。由于UDP协议没不存在的过程,使他的传输效率较高;也正因为这个原因,它的可靠性不如流式套接字(Socket)高。腾讯QQ就是使用UDP收发信息典型案例,所以用户就会遇到信息丢失的情况。
参考文献
[1]朱喜福,徐剑魁.Java程序设计[M].清华大学出版社,2010.
[2]辛运帏,饶一梅.Java语言程序设计[M].人民邮电出版社,2009.
[3]刘永华.Java网络编程技术[M].清华大学出版社,2008.
(作者单位:天津交通职业学院)