zoukankan      html  css  js  c++  java
  • 20175330第九周学习总结

    20165318 2017-2018-2 《Java程序设计》第九周学习总结

    目录

    学习过程遇到的问题及总结

    • Q1:运行课本例子4时,代码中为汉字,但同样的输出的字符为乱码。

    技术分享图片

    • 解决方法:检查后发现,使用的编码方式不一致,其他源文件使用的是GBK,而运行的Client4使用的是UTF-8,将这个源文件也改为GBK编码,就可以正确运行了。

    • Q2:运行课本例子4后又运行例子3时,提示以下问题。
      技术分享图片

    • 解决方法:我猜测可能是运行的例子4堵塞了进程,于是就将前面所有的运行程序都关掉,之后就可以正常运行例子3了。

    • Q3:运行Java远程调用的相关例子时,出现以下错误
      技术分享图片

    • 解决方法:IDEA中提示应该将所有类都方法sever包中,但我放进去之后还是不能正常编译,后来我尝试将ClientApplication类也放在sever包中,就可以正常运行了。

    返回目录

    教材学习内容总结

    第13章 Java网络编程

    13.1 URL类

    • URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用程序称作客户端程序。

    • 一个URL对象包含的三个基本信息:协议、地址和资源。

      • 协议:必须是URL对象所在的Java虚拟机支持的协议,常用的有:Http、Ftp、File协议,由参数protocol指定。
      • 地址:必须是能连接的有效IP地址或域名,由参数host指定。
      • 资源:可以是主机上的任何一个文件,由参数file指定。
    • 构造方法

      public URL (String spec) throws MalformedURLException
      public URL(String protocol,String host,String file) throws MalformedURLException
    • 读取URL中的资源:调用InputStream openStream()方法返回一个输入流。

    13.2 InetAdress类

    • 地址的表示:域名和IP地址

    • 获取Internet上主机的地址:
      1.使用InetAddress类的静态方法getByName(String s)将一个域名或 IP 地址传递给该方法的参数 S,获得一个 InetAddress 对象;
      1. public String getHostName()获取InetAddress对象所含的域
      2. public String getHostAddress()获取InetAddress对象所含的IP地址
    • 获取本地机的地址:
      可以使用InetAddress类的静态方法getLocalHost()获得一个InetAddress对象,该对象含有本地机的域名和IP地址。

    13.3 套接字

    • 当两个程序需要通信时,它们可以通过使用Socket类建立套接字对象并连接在一起(端口号和IP地址的组合得出一个网络套接字)。

    • Socket类的构造方法:

      Socket(String host, int port)

      参数host是服务器的IP地址,port是端口号。

      //建立连接到服务器的套接字对象
      try { Socket clientSocket = new Socket("http://192.168.0.78",2010);
      }  //(IP,端口号)
      catch(IOException e) {}
    • ServerSocket 的构造方法:

      ServerSocket(int port)

      其中port 是一个端口号。

    //建立ServerSocket对象
    try{ ServerSocket serverForClient = new ServerSocket(2010);
    }//(端口号)
    catch(IOException e) {}
    
    
    //使用accept()方法将客户端和服务器端套接字连接起来
    try{ Socket sc = serverForClient.accept();
    }
    catch(IOException e) {
    • 可以使用方法accept()将客户端的套接字和服务器端的套接字连接起来。

    • 从套接字连接中读取数据与从文件中读取数据有着很大的不同,从文件中读取数据时,所有的数据都已经在文件中了,而使用套接字连接时,可能在另一端数据发送之前,就已经开始读取了。

    • 注意:accept方法也会阻塞线程的执行,直到接收到客户的呼叫。

    • 使用多线程技术

      • 为了防止堵塞线程,服务器端收到一个客户的套接字后,就应该启动一个专门为该客户服务的线程。
      • 使用InetSocketAddress创建一个对象,以connect。
    • 套接字通信基本原则:

      • 服务器应当启动一个专门的线程,在该线程中和客户的套接字建立连接。
      • 由于套接字的输入流在读取信息时可能发生阻塞,客户端和服务器端都需要在一个单独的线程中读取信息。

    13.4 UDP数据报

    • 套接字是基于TCP协议的网络通信。

    • UDP的信息传递更快,但不提供可靠性保障,即无法知道数据能否正确到达目的地,也不能确定数据到达目的地的顺序是否和发送的顺序相同。

    • 基于UDP通信的基本模式:
      • 将数据打包,称为数据包(好比将信件装入信封一样),然后将数据包发往目的地。
      • 接受别人发来的数据包(好比接收信封一样),然后查看数据包中的内容。
    • 用DatagramPacket的以下两个构造方法创建待发送的数据包:

      DatagramPacket(byte data[],int length,InetAddtress address,int port)
      DatagramPack(byte data[],int offset,int length,InetAddtress address,int port)

      方法DatagramSocket()负责发送数据包。
      方法receive(DatagramPacket pack)负责接收数据包。

    13.5 广播数据报

    • A类地址:a<128,则b.c.d表示主机。
    • B类地址:128<=a<192,则a.b表示网络地址,c.d表示主机地址。
    • C类地址:a>=192,a.b.c表示网络地址,d表示主机地址。
    • D类地址:224.0.0.0~224.255.255.255是保留地址
      要广播或接收广播的主机都必须加入到同一个D类地址。

    • D类地址不是用来你代表位置的,即在网络上不能使用D类地址去查找计算机。

    13.6 Java远程调用

    • RMI是一种分布式技术,使用RMI可以让一个虚拟机上的应用程序请求调用位于网络上另一处虚拟机上的对象。

    • 代理的特点是它与远程对象实现了相同的接口。

    • 存根是一种特殊的字节码,并让这个存根产生的对象作为远程对象的代理,其字节码后缀为"_Stub"。

    • 远程对象必须实现java.rmi包中的Remote接口。

    • 代理的特点是它与远程对象实现了相同的接口

    • RMI的设计细节
      • RMI使用rmic命令生成存根
      • 执行rimregistry命令
      • 启动远程对象服务
      • 运行客户端程序

    返回目录

    代码托管

    码云链接

    代码统计

    技术分享图片

    技术分享图片

    返回目录

    20165318 2017-2018-2 《Java程序设计》第九周学习总结

    标签:spec   utf   汉字   acc   tcp协议   java虚拟机   accept   目的   code   

    原文:https://www.cnblogs.com/sunxiaoxuan/p/8971908.html

  • 相关阅读:
    C#结构体指针的定义及使用详解
    C# out和ref关键字
    CListCtrl控件主要事件及LVN_ITEMCHANGED消息和鼠标双击列表项事件的处理
    深圳职位:替朋友招聘biztalk的技术人员 无为而为
    微软出最新SQL Server 2005 累积修补程序包(版本 9.0.2153)(200684),这是SP1之后的更新 无为而为
    微软Visual Studio 2005 SDK version 3.0 发布了,TFS扩展的开发人员/DSL/VSTS Test都应该关注 无为而为
    好东西,将你的英文版TFS变为中文版?:Visual Studio 2005 Team Foundation Server 语言更改包 无为而为
    Analysis Service计算[期间增长率]的若干注意 无为而为
    亲身体验:更改 Team Foundation Server 部署的语言版本是一个复杂耗时的过程 无为而为
    各大门户调查:鄙视新浪,将博士伦的广告挂在热点新闻中间好几天了,把大众当傻瓜 无为而为
  • 原文地址:https://www.cnblogs.com/waaaaa/p/10786914.html
Copyright © 2011-2022 走看看