• 《Java程序设计》第十一周学习总结


    第十一周java学习总结

    学习内容

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

    ·        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,Stringfile) 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类的基本使用

     */
    publicclassInetAddressDemo {
     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地址的组合得出一个网络套接字)。

    ·   4.客户端套接字
    客户端的程序使用Socket类建立负责连接到服务器的套接字对象。
    建立连接到服务器的套接字对象:

      try{  Socket mysocket=new Socket(“http://192.168.0.78”,1880);
         }
        catch(IOException e)
        {  } 

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

    ·  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服务器
     * 功能:将客户端发送的内容反馈给客户端
     */
    publicclassSimpleSocketServer {

         public static void main(String[] args) {
     ServerSocket serverSocket = null;
      Socket socket = null;
       OutputStream os = null;
    nputStream is = null;
    //监听端口号
    int port = 10000;
      try {
    //建立连接
      serverSocket = new ServerSocket(port);
     //获得连接
      socket = serverSocket.accept();
       //接收客户端发送内容
    is = socket.getInputStream();
    byte[] b = newbyte[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){}
                       }
             }
     }
    提交代码截图:

     

    码云代码链接:

    https://gitee.com/Reveal/qwe/tree/master/qwe/qwe/src

     

  • 相关阅读:
    程序员的私人外包专家
    目录
    Autumoon Code Library 2008 Beta版 重新发布
    为您的开发团队找个好管家
    .NET编程利器:Reflector for .NET
    3. Extension Methods(扩展方法)
    1. C# 3.0简介
    4. Lambda Expressions (Lambda表达式)与Expressions Tree(表达式树)
    7. Query Expressions(查询表达式)
    6. Anonymous Types(匿名类型)
  • 原文地址:https://www.cnblogs.com/DLuob/p/10851774.html
Copyright © 2020-2023  润新知