第十一周java学习总结

第十一周java学习总结

学习内容

第13章 Java网络编程
主要内容
URL类
InetAdress类
套接字
UDP数据报
广播数据报
Java远程调用(RMI)git

重点和难点
重点: URL的使用和套接字链接机制
难点:套接字链接机制编程

  • 1.URL类
    URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL建立对象的应用程序称做客户端程序。
    一个URL对象一般包含最基本的三部分信息:协议、地址、资源。
    URL的构造方法
    URL类一般使用以下的构造方法建立一个URL对象:
public URL(String spec) throws MalformedURLException 
public URL(String protocol, String host,String file) throws MalformedURLException

读取URL中的资源
URL对象调用
InputStream openStream()
方法能够返回一个输入流,该输入流指向URL对象所包含的资源。经过该输入流能够将服务器上的资源读入到客户端。服务器

  • 2.InetAdress类
    地址的表示
    Internet上的主机有两种方式表示地址:
    域名
    例如 www.tsinghua.edu.cn
    IP地址
    例如 202.108.35.210
    java.net包中的InetAddress类对象含有一个Internet主机地址的域名和IP地址,例如 www.sina.com.cn/202.108.37.40 。
package inetaddressdemo;

import java.net.*;

/**

 * 演示InetAddress类的基本使用

 */

public class InetAddressDemo {

         public static void main(String[] args) {

                   try{

                            //使用域名建立对象

                            InetAddress inet1 = InetAddress.getByName("www.163.com");

                            System.out.println(inet1);

                            //使用IP建立对象

                            InetAddress inet2 = InetAddress.getByName("127.0.0.1");

                            System.out.println(inet2);

                            //得到本机地址对象

                            InetAddress inet3 = InetAddress.getLocalHost();

                            System.out.println(inet3);

                            //得到对象中存储的域名

                            String host = inet3.getHostName();

                            System.out.println("域名:" + host);

                            //得到对象中存储的IP

                            String ip = inet3.getHostAddress();

                            System.out.println("IP:" + ip);

                   }catch(Exception e){}

         }

}

获取地址
获取Internet上主机的地址
可使用InetAddress类的静态方法getByName(String s);
得到一个InetAddress对象,该对象含有主机地址的域名和IP地址,该对象用以下格式表示它包含的信息:
www.sina.com.cn/202.108.37.40
获取本地机的地址
咱们可使用InetAddress类的静态方法getLocalHost()得到一个InetAddress对象,该对象含有本地机的域名和IP地址。网络

  • 3.套接字
    IP地址标识Internet上的计算机,端口号标识正在计算机上运行的进程(程序)。端口号被规定为一个16位的0~65535之间的整数。
    当两个程序须要通讯时,它们能够经过使用Socket类创建套接字对象并链接在一块儿(端口号与IP地址的组合得出一个网络套接字)。socket

  • 4.客户端套接字
    客户端的程序使用Socket类创建负责链接到服务器的套接字对象。
    创建链接到服务器的套接字对象:
try{  Socket mysocket=new Socket(“http://192.168.0.78”,1880);
     }
    catch(IOException e)
    {  }

与mysocket相关的方法
getInputStream()得到一个输入流
getOutputStream()得到一个输出流
用getInputStream()获得的输入流接到另外一个DataInputStream数据流上
用getOutputStream()获得的输出流接到另外一个DataOutputStream数据流上tcp

  • 5.UDP数据报
    基于UDP的通讯和基于TCP的通讯不一样,基于UDP的信息传递更快,但不提供可靠性保证。
    基于UDP通讯的基本模式是:
    将数据打包,称为数据包(比如将信件装入信封同样),而后将数据包发往目的地。
    接受别人发来的数据包(比如接收信封同样),而后查看数据包中的内容。分布式

  • 6发送数据包
    用DatagramPacket类将数据打包,即用DatagramPacket类建立一个对象,称为数据包。用DatagramPacket的如下两个构造方法建立待发送的数据包:
    DatagramPacket(byte data[],int length,InetAddtress address,int port)
    DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)
    用DatagramSocket类的不带参数的构造方法:DatagramSocket()建立一个对象,该对象负责发送数据包。例如:
DatagramSocket  mail_out=new DatagramSocket();
mail_out.send(data_pack);
  • 7.RMI的设计细节
    扩展Remote接口
    定义一个接口是java.rmi包中Remote的子接口,即扩展Remote接口。
    RemoteSubject.java
    Java远程调用,RMI(Remote Method Invocation)是一种分布式技术,使用RMI可让一个虚拟机(JVM)上的应用程序请求调用位于网络上另外一处的JVM上的对象方法。习惯上称发出调用请求的虚拟机(JVM)为(本地)客户机,称接受并执行请求的虚拟机(JVM)为(远程)服务器。
    远程对象
    建立远程对象的类必需要实现Remote接口,RMI使用Remote接口来标识远程对象,可是Remote中没有方法,所以建立远程对象的类须要实现Remote接口的一个子接口。RemoteConcreteSubject.java
    存根(Stub)与代理:RMI使用rmic命令生成存根
    RemoteConcreteSubject_Stub.class
    启动注册rmiregistry: 执行rimregistry命令
    启动远程对象服务:远程服务器使用java.rmi包中的Naming类调用其类方法rebind(String name, Remote obj)绑定一个远程对象到rmiregistry所管理的注册表中,该方法的name参数是URL格式,obj参数是远程对象,未来客户端的代理会经过name 找到远程对象obj。 BindRemoteObject.java
    运行客户端程序:远程服务器启动远程对象服务后,客户端就能够运行有关程序,访问使用远程对象。 ClientApplication.java
  • 8.echo服务器
    package tcp;

import java.io.*;

import java.net.*;

/**

 * echo服务器

 * 功能:将客户端发送的内容反馈给客户端

 */

public class SimpleSocketServer {

         public static void main(String[] args) {

                   ServerSocket serverSocket = null;

                   Socket socket = null;

                   OutputStream os = null;

                   InputStream is = null;

                   //监听端口号

                   int port = 10000;

                   try {

                            //创建链接

                            serverSocket = new ServerSocket(port);

                            //得到链接

                            socket = serverSocket.accept();

                            //接收客户端发送内容

                            is = socket.getInputStream();

                            byte[] b = new byte[1024];

                            int n = is.read(b);

                            //输出

                            System.out.println("客户端发送内容为:" + new String(b,0,n));

                            //向客户端发送反馈内容

                            os = socket.getOutputStream();

                            os.write(b, 0, n);

                   } catch (Exception e) {

                            e.printStackTrace();

                   }finally{

                            try{

                                     //关闭流和链接

                                     os.close();

                                     is.close();

                                     socket.close();

                                     serverSocket.close();

                            }catch(Exception e){}

                   }

         }

}

学习总结

理解 URL类是对统一资源定位符的抽象,使用URL建立对象的应用程序称做客户端程序。
网络套接字是基于TCP协议的有链接通讯,套接字链接就是客户端的套接字对象和服务器端的套接字对象经过输入、输出流链接在一块儿。
基于UDP的通讯和基于TCP的通讯不一样,基于UDP的信息传递更快,但不提供可靠性保证。
设计广播数据报网络程序时,必须将要广播或接收广播的主机加入到同一个D类地址。D类地址也称做个组播地址。
RMI是一种分布式技术,使用RMI可让一个虚拟机(JVM)上的应用程序请求调用位于网络上另外一处的JVM上的对象方法RMI是一种分布式技术。

提交代码截图

代码推送

代码托管学习

相关文章
相关标签/搜索