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

教材学习内容总结

  • 网络编程就是运行在不同计算机中两个程序之间的数据交换。

  • 网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址。在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成,例如10.0.120.34。

  • 一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

  • 在实际传输数据以前需要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器,也就是通俗的说法叫做域名解析。

  • IP地址的使用要比域名通用一些。

  • 在硬件上规定,端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口。

  • 通讯的一端发送数据,另外一端反馈数据,网络通讯都基于该模型。

  • 在网络通讯中,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别。

  • 这种网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。

  • 其实在运行很多程序时,没有必要使用专用的客户端,而需要使用通用的客户端,例如浏览器,使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。

  • B/S结构其实也就是一种特殊的C/S结构。

  • 因为各个网络程序之间协议格式的不同,所以才导致了客户端程序都是专用的结构。

  • 在现有的网络中,网络通讯的方式主要有两种:1、 TCP(传输控制协议)方式;2、 UDP(用户数据报协议)方式。在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。

  • 重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则都通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据的传递。TCP方式的速度稍微慢一些,而且传输时产生的数据量要比UDP稍微大一些。

  • 客户端的编程主要由三个步骤实现:1、 建立网络连接;2、 交换数据;3、 关闭网络连接

  • 服务器端的编程由四个步骤实现实现:1、 监听端口;2、 获得连接;3、 交换数据;4、 关闭连接。

  • 一般在服务器端编程中,当获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。

  • 基础的网络类——InetAddress类。该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。

  • 在Java语言中,对于TCP方式的网络编程提供了良好的支持,在实际实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。

  • 在客户端网络编程中,首先需要建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:

    Socket socket1 = new Socket(“192.168.1.103”,10000);
    
    Socket socket2 = new Socket(“www.sohu.com”,80);
  • socket1实现的是连接到IP地址是192.168.1.103的计算机的10000号端口,而socket2实现的是连接到域名是www.sohu.com的计算机的80号端口,至于底层网络如何实现建立连接,对于程序员来说是完全透明的。如果建立连接时,本机网络不通,或服务器端程序未开启,则会抛出异常。

  • 连接一旦建立,则完成了客户端编程的第一步,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,代码如下:

    OutputStream os = socket1.getOutputStream(); //获得输出流

    InputStream is = socket1.getInputStream(); //获得输入流

  • 关闭网络连接,释放网络连接占用的系统端口和内存等资源,完成网络操作,示例代码如下:

    socket1.close();
  • 实现服务器端监听的代码为:

    ServerSocket ss = new ServerSocket(10000);

    该代码实现的功能是监听当前计算机的10000号端口,如果在执行该代码时,10000号端口已经被别的程序占用,那么将抛出异常。否则将实现监听。

  • 实现获得连接的代码是:

    Socket socket = ss.accept();
  • 关闭服务器端连接。实现的代码为:
    
       ss.close();
  • 在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:DatagramSocket与DatagramPacket。

  • UDP方式的建立连接只需要建立一个连接对象即可, 实现的代码为:

     DatagramSocket ds = new DatagramSocket();
  • 实现发送数据的代码如下:

     String s = “Hello”;
    
     String host = “127.0.0.1”;
    
     int port = 10001;
    
     //将发送的内容转换为byte数组
    
      byte[] b = s.getBytes();
    
     //将服务器IP转换为InetAddress对象
    
      InetAddress server = InetAddress.getByName(host);
    
      //构造发送的数据包对象
    
      DatagramPacket sendDp = new DatagramPacket(b,b.length,server,port);
    
      //发送数据
    
      ds.send(sendDp);
  • 实现接收数据以及显示服务器端反馈内容的示例代码如下:

    //构造缓冲数组

    byte[] data = new byte[1024];

    //构造数据包对象

    DatagramPacket received = new DatagramPacket(data,data.length);

    //接收数据

    ds.receive(receiveDp);

    //输出数据内容

    byte[] b = receiveDp.getData(); //获得缓冲数组

    int len = receiveDp.getLength(); //获得有效数据长度

    String s = new String(b,0,len);

    System.out.println(s);

  • 闭连接使用连接对象中的close方法即可,实现的代码如下:

           ds.close();
  • UDP方式的同一个网络连接对象,可以发送到达不同服务器端IP或端口的数据包,这点是TCP方式无法做到的。

  • UDP方式服务器端网络编程需要建立一个连接,该连接监听某个端口,实现的代码为:

    DatagramSocket ds = new DatagramSocket(10010);

  • 服务器端需要获得客户端的IP和客户端使用的端口号,这个都可以从接收到的数据包中获得。示例代码如下:

    //获得客户端的IP

    InetAddress clientIP = receiveDp.getAddress();

    //获得客户端的端口号

    Int clientPort = receiveDp.getPort();

  • 关闭服务器端连接,代码如下:

    ds.close();
  • 由于各种网络程序使用不同的协议格式,所以不同网络程序的客户端之间无法通用。常见协议的格式:HTTP(Hyper Text Transfer Protocol,超文本传输协议)、FTP(File Transfer Protocol,文件传输协议),SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)。

教材学习中的问题和解决过程

本周代码托管截图

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 100/100 1/2 20/20
第二周 250/350 1/3 20/40
第三周 500/850 1/4 25/65
第四周 500/1350 1/5 20/85
第五周 550/1900 1/6 20/105
第六周 600/2500 2/8 20/125
第七周 500/3000 2/10 20/145
第八周 400/3400 3/13 15/160
第九周 100/3500 2/15 15/175
第十周 500/4000 2/17 25/200

参考资料

20145327 《Java程序设计》第十周学习总结的更多相关文章

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

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 异常: 多线程: 2.书面作业 Q1.finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...

  2. Java程序设计第十周学习总结

    Java课程知识梳理: 流的区分; 字符流与字节流的区别: 字节流是直接操作文件本身的,如果没有关闭字节流操作,文件会依然输出内容 而字符流在程序运行之后会发现文件没有任何的内容,这是因为字符流操作的 ...

  3. 20145327 《Java程序设计》第九周学习总结

    20145327 <Java程序设计>第九周学习总结 教材学习内容总结 JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无需接触底层 ...

  4. 20145327 《Java程序设计》第二周学习总结

    20145327 <Java程序设计>第二周学习总结 教材学习内容总结 JAVA类型:基本类型与类类型(也称参考类型). 基本类型分为:整数(short,int,long).字节(byte ...

  5. 20145327 《Java程序设计》第一周学习总结

    20145327 <Java程序设计>第一周学习总结 教材学习内容总结 Java根据领域不同,区分为Java SE.Java EE与Java ME三大平台.Java SE是各应用平台的基础 ...

  6. 20145213《Java程序设计》第九周学习总结

    20145213<Java程序设计>第九周学习总结 教材学习总结 "五一"假期过得太快,就像龙卷风.没有一点点防备,就与Java博客撞个满怀.在这个普天同庆的节日里,根 ...

  7. 《Java程序设计》第九周学习总结

    20145224 <Java程序设计>第九周学习总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的 ...

  8. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  9. 20155304田宜楠2006-2007-2 《Java程序设计》第一周学习总结

    20155304田宜楠2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 - 浏览教材,根据自己的理解每章提出一个问题 第一章 除了书上提到的开发工具还有什么适合 ...

  10. 20145237 《Java程序设计》第九周学习总结

    20145237 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC入门 ·数据库本身是个独立运行的应用程序 ·撰写应用程序是利用通信协议对数据库进行指令 ...

随机推荐

  1. Python闲谈(一)mgrid慢放

    不论是利用Mayavi还是matplotlib绘制三维图表,里面都用到了numpy中的一个函数叫mgrid.本次博客我简单地讲一下mgrid是干什么用的,以及一个三维曲面是如何绘制出来的. 首先说明一 ...

  2. Python--上传文件和下载文件

    #!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2017/12/28 13:56# @Author : Aries# @Site : # @ ...

  3. Hadoop伪分布安装详解(四)

    目录: 1.修改主机名和用户名 2.配置静态IP地址 3.配置SSH无密码连接 4.安装JDK1.7 5.配置Hadoop 6.安装Mysql 7.安装Hive 8.安装Hbase 9.安装Sqoop ...

  4. 预见未来丨机器学习:未来十年研究热点 量子机器学习(Quantum ML) 量子计算机利用量子相干和量子纠缠等效应来处理信息

    微软研究院AI头条 https://mp.weixin.qq.com/s/SAz5eiSOLhsdz7nlSJ1xdA 预见未来丨机器学习:未来十年研究热点 机器学习组 微软研究院AI头条 昨天 编者 ...

  5. TCP requires two packet transfers to set up the connection before it can send data

    wHTTP重用现存连接来减少TCP建立时延. HTTP The Definitive Guide 4.2.3 TCP Connection Handshake Delays When you set ...

  6. nodejs(三)上之express

    express 简介 Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具. 使用 Express 可以快速 ...

  7. hotspot的简单介绍

    慢慢开始深入了解java,才知道java虚拟机有很多种,其中最为知名的应该就是hotspot了,接下来是hotspot的一点简单介绍. 没错,Java是解释语言,但并不意味着它一定被解释执行.早期 的 ...

  8. 剑指Offer——和为S的两个数字

    题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的.   输入描述: 对应每个测试案例,输出两个数,小的先输出. ...

  9. Storm编程模型及组件流程图

    一.Storm编程模型 二.Storm组件流程图

  10. vue中获取客户端IP地址(不需要额外引入三方文件)

    之前看了几种方法 ,都是引入腾讯,新浪,搜狐等的三方js文件来查询IP地址,但是我自己测试的时候IP地址不准确,所以就找了找,发现了这个方法,准确的获取到了IP地址和cmd的ipconfig获取到的I ...