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//protocol指定协议,host指定地址,file指定资源
  • 读取URL中的资源:调用InputStream openStream()方法返回一个输入流。

13.2 InetAdress类

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

  • 获取Internet上主机的地址:

    1.使用InetAddress类的静态方法getByName(String s)将一个域名或 IP 地址传递给该方法的参数 S,获得一个 InetAddress 对象;

    2. public String getHostName()获取InetAddress对象所含的域

    3. 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 是一个端口号。

  • 可以使用方法accept()将客户端的套接字和服务器端的套接字连接起来。
//建立ServerSocket对象
try{ ServerSocket serverForClient = new ServerSocket(2010);
}//(端口号)
catch(IOException e) {} //使用accept()方法将客户端和服务器端套接字连接起来
try{ Socket sc = serverForClient.accept();
}
catch(IOException e) {
  • 从套接字连接中读取数据与从文件中读取数据有着很大的不同,从文件中读取数据时,所有的数据都已经在文件中了,而使用套接字连接时,可能在另一端数据发送之前,就已经开始读取了。

  • 注意: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类的不带参数的构造方法。
  • 接收数据包

      1. DatagramSocket(int port)创建对象,其中参数必须与待接收的数据包的端口号相同。
    • 方法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的设计细节

    • 扩展Remote接口
    • 创建远程对象
    • RMI使用rmic命令生成存根
    • 启动注册rimregistry
    • 启动远程对象服务
    • 运行客户端程序

返回目录

代码托管

码云链接

代码统计

返回目录

20165318 2017-2018-2 《Java程序设计》第九周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第九周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2.书面作业 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什 ...

  2. 20145220java程序设计第九周学习总结

    20145220java程序设计第九周学习总结 教材学习内容总结 JBDC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商对接口直接操作,开发人员无须接触底层数据可驱动程序的差异 ...

  3. 201771010134杨其菊《面向对象程序设计java》第九周学习总结

                                                                      第九周学习总结 第一部分:理论知识 异常.断言和调试.日志 1.捕获 ...

  4. 201521044152<java程序设计>第一周学习总结

    本周学习总结 java开发时间虽然很短,但是发展迅速,已成为现在非常流行的一门语言,很开心能有幸学习java.第一周学习了java的平台,运行环境jdk以及jrt等等新名词,还了解了eclipse的基 ...

  5. 20145304 刘钦令 Java程序设计第二周学习总结

    20145304 <Java程序设计>第2周学习总结 教材学习内容总结 java可区分基本类型和类类型(即参考类型)两大类型系统. 基本类型主要可区分为整数.字节.浮点数.字符与布尔. 整 ...

  6. 20145304 刘钦令 Java程序设计第一周学习总结

    20145304<Java程序设计>第1周学习总结 教材学习内容总结 1995年5月23日,是公认的Java的诞生日,Java正式由Oak改名为Java. Java的三大平台是:Java ...

  7. 201621123007 Java程序设计第一周 学习总结

    第一周-Java基本概念 201621123007 <Java程序设计> 第一周学习总结 1. 本周学习总结 java是面向对象的一类语言,三大特征:封装性,继承性,多态性. jdk jr ...

  8. 马凯军201771010116《面向对象与程序设计Java》第九周学习总结

    一.理论知识部分 异常.日志.断言和调试 1.异常:在程序的执行过程中所发生的异常事件,它中断指令的正常执行. 2.Java的异常处理机制可以控制程序从错误产生的位置转移到能够进行错误处理的位置. 3 ...

  9. 201521123063 JAVA程序设计 第二周学习总结

    1.本周学习重点(2.27-3.5) java中的数组 以二维数组为例,数组名为scores,则 (1)先声明数组 int[][] scores;或int scores[][];或int[] scor ...

  10. 《Java》第九周学习总结

    下载mysql 选择mysql的管理软件 idea可以直接连接 然后用库运行程序,但是没有截图,,因为想在navicat上试试,可惜速度太慢了 打开idea又很慢,所以明天再更新

随机推荐

  1. 算法:QQ等级换算成皇冠太阳星星月亮

    /// <summary> /// 等级换算成图标分布 /// 以QQ的形式计算 /// 2^(2*0) /1    /// 2^(2*1) /4    /// 2^(2*2) /16   ...

  2. SpringBoot(七) Working with data: SQL

    一.JdbcTemplate 二.Spring-data-jpa 实体类 继承JpaRepository<T,ID> 的接口,来访问数据库 30.3 JPA and Spring Data ...

  3. idea 中如何生成类图

    前言:记录一下 idea 中如何生成类图,毕竟类图在开发或看源码时用得特别多. 推荐博客:https://blog.csdn.net/zhangle1hao/article/details/78804 ...

  4. 使用CSS3改变文本选中的默认颜色——张鑫旭

    关于浏览器文字选中颜色 以我的系统举例(xp 默认主题),浏览器上页面文字选中后默认的背景色是一种蓝色, 不同浏览器的颜色有些许差异,但大致相同,文字颜色也近乎白色,如下图所示,截自Firefox3. ...

  5. visibilitychange:API详解

    利用页面可见性API搞个怪 继各大站点.博客在用console发招聘.玩游戏.埋彩蛋之后(知乎相关链接),小剧似乎又发现了一个好玩儿的东西,目测会火,利用页面可见性API做些小技俩. 页面可见性是什么 ...

  6. JavaWeb学习总结(十):Session简单使用

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  7. BS和CS的区别

    C/S又称Client/Server或客户/服务器模式.服务器通常采用高性能的PC.工作站或小型机,并采用大型数据库系统,如Oracle.Sybase.Informix或 SQL Server.客户端 ...

  8. 记ASP.NET 使用 X509Certificate2 出现的一系列问题

    在做微信支付退款的时候,由于需要使用到p12证书,结果就遇到一系列的坑.这里做个记录方便以后查阅. 原先加载证书的代码: X509Certificate2 cert = new X509Certifi ...

  9. Elixir 学习资源

    http://segmentfault.com/blog/lds/1190000002458978

  10. 【node】fs模块,文件和目录的操作

    检查文件是否存在,查询文件信息 fs.stat() fs.stat('./server.js', function (err, stat) { if (stat && stat.isF ...