21045308刘昊阳 《Java程序设计》第十周学习总结

教材学习内容总结

网络编程

  • 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。
  • 狭义的网络编程范畴:程序员所作的事情,就是把数据发送到指定的位置,或者接收到指定的数据。

    1 网络概述

    1.1 计算机网络概述
  • 计算机网络:通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含的设备有:计算机、路由器、交换机等等。
  • IP地址:网络中的每个设备都会有一个唯一的数字标识,命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成
  • 域名:一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
  • 域名解析:通过DNS服务器将域名转换为IP地址。
  • 端口(port):在同一个计算机中每个程序对应唯一的端口,这样一个计算机上就可以通过端口区分发送给每个端口的数据了,也就是一个计算机上可以并发运行多个网络程序,而不会在互相之间产生干扰。
  • 进行网络通讯交换时,就可以通过IP地址查找到该台计算机,然后通过端口标识这台计算机上的一个唯一的程序。

    1.2 网络编程概述
  • 网络通讯基于“请求-响应”模型,通讯的一端发送数据,另外一端反馈数据。
  • C/S结构:客户端与服务器端:网络编程中的两种程序就分别是客户端和服务器端,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器。一旦通讯建立,则客户端和服务器端完全一样,没有本质的区别,这种网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。
  • B/S结构:没有必要使用专用的客户端,而需要使用通用的客户端,例如浏览器,使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。在开发时只需要开发服务器端即可,这种结构的优势在于开发的压力比较小,不需要维护客户端。这种结构也存在着很多不足,例如浏览器的限制比较大,表现力不强,无法进行系统级操作等。
  • B/S结构其实也就是一种特殊的C/S结构。
  • P2P(Point to Point)程序:一个P2P程序中既包含客户端程序,也包含服务器端程序
  • 协议(Protocol):规定该数据的格式,这个数据的格式就是协议
  • 协议的设计以及协议的生产和解析才是网络编程中最核心的内容

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

    2 网络编程技术

    2.1 网络编程步骤
    2.1.1 客户端网络编程步骤
  • 客户端的编程主要由三个步骤实现:1、 建立网络连接:建立网络连接时需要指定连接到的服务器的IP地址和端口号 2、 交换数据 3、 关闭网络连接

    2.1.2 服务器端网络编程步骤
  • 服务器端一般实现程序的核心逻辑以及数据存储等核心功能四个步骤:1、 监听端口 2、 获得连接 3、 交换数据 4、 关闭连接

    2.1.3 小结
    2.2 Java网络编程技术
  • 和网络编程有关的基本API位于java.net包中
  • InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部

    2.3 TCP编程
  • TCP方式的网络编程,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接,程序员实际编程时,只需要指定IP地址和端口号码就可以建立连接了
  • 建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接,示例如下:
    Socket socket1 = new Socket(“192.168.1.103”,10000);
    Socket socket2 = new Socket(“www.sohu.com”,80);

  • 连接一旦建立,紧接着的步骤就是按照“请求-响应”模型进行网络数据交换,在Java语言中,数据传输功能由Java IO实现,也就是说只需要从连接中获得输入流和输出流即可,然后将需要发送的数据写入连接对象的输出流中,在发送完成以后从输入流中读取数据即可。示例代码如下:
    OutputStream os = socket1.getOutputStream(); //获得输出流
    InputStream is = socket1.getInputStream(); //获得输入流
  • 数据交换完成以后,关闭网络连接,释放网络连接占用的系统端口和内存等资源,完成网络操作,示例代码如下:
    socket1.close();
  • TCP类型的服务器端的编写:1.服务器端编程的第一个步骤是监听端口,例ServerSocket ss = new ServerSocket(10000);2.服务器端编程的第二个步骤是获得连接。该步骤的作用是当有客户端连接到达时,建立一个和客户端连接对应的Socket连 接对象,从而释放客户端连接对于服务器端端口的占用,实现获得连接的代码是:
    Socket socket = ss.accept();
    3.连接获得以后,后续的编程就和客户端的网络编程类似了,这里获得的Socket类型的连接就和客户端的网络连接一样了,只是服务器端需要首先读取发送过来的数据,然后进行逻辑处理以后再发送给客户端,也就是交换数据的顺序和客户端交换数据的步骤刚好相反4.在服务器端通信完成以后,关闭服务器端连接。实现的代码为:
    ss.close();

  • 线程池:是池技术的一种,就是在程序启动时首先把需要个数的线程对象创建好,然后当客户端连接到达时从池中取出一个已经创建完成的线程对象使用即可。当客户端连接关闭以后,将该线程对象重新放入到线程池中供其它的客户端重复使用,这样可以提高程序的执行速度,优化程序对于内存的占用等。
  • UDP方式的网络编程在Java语言中的实现:需要使用的类还是包含在java.net包中,在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:DatagramSocket、DatagramPacket
  • DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接,DatagramSocket实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络连接,该类既可以用于实现客户端连接,也可以用于实现服务器端连接
  • DatagramPacket类实现对于网络中传输的数据封装,该类的对象代表网络中交换的数据,在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些
  • 1.建立连接:只需要建立一个连接对象即可,不需要指定服务器的IP和端口号码。实现的代码为:
    DatagramSocket ds = new DatagramSocket();
    可以通过制定连接使用的端口号来创建客户端连接(使用本地计算机的5000号端口)
    DatagramSocket ds = new DatagramSocket(5000);
    2.发送数据:需要将需要发送的数据内容首先转换为byte数组,然后将数据内容、服务器IP和服务器端口号一起构造成一个DatagramPacket类型的对象,发送时调用网络连接对象中的send方法发送该对象即可
    3.关闭连接:使用连接对象中的close方法即可
  • 不管发送的数据内容是什么,都需要转换为byte数组,将服务器端的IP地址构造成InetAddress类型的对象,将这些信息构造成一个DatagramPacket类型的对象,调用连接对象ds的send方法把DatagramPacket对象发送出去即可
  • UDP方式的同一个网络连接对象,可以发送到达不同服务器端IP或端口的数据包,这点是TCP方式无法做到的
  • 服务器端:1.建立连接:该连接监听某个端口,实现的代码为:
    DatagramSocket ds = new DatagramSocket(10010);
    2.接收客户端发送过来的数据:receive方法,阻塞方法
    3.服务器端需要获得客户端的IP和客户端使用的端口号,示例代码如下:
    //获得客户端的IP
    InetAddress clientIP = receiveDp.getAddress();
    //获得客户端的端口号
    Int clientPort = receiveDp.getPort();
    4.关闭服务器端连接ds.close();

    网络协议

网络编程示例

3.1质数判别示例

其他(感悟、思考等,可选)

本周学习了网络编程,感觉还是挺难的,毕竟之前从来没有接触过与网络进行联通的编程内容,但是也很有趣,感觉很有实际用处

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 30/30 1/2 16/16 基本概念
第二周 100/130 1/3 18/34 基础语法
第三周 100/230 1/4 26/60 对象封装
第四周 300/530 1/5 30/90 继承接口
第五周 300/830 1/6 30/120 异常MapCollection
第六周 300/1230 2/8 30/150 输入输出、并行
第七周 100/1330 2/10 10/160 时间日期
第八周 100/1430 2/12 15/175 通用API
第九周 100/1530 2/14 15/190 数据库
第十周 100/1630 2/15 10/200 网络编程

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

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

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

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

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

  3. 21045308刘昊阳 《Java程序设计》第九周学习总结

    21045308刘昊阳 <Java程序设计>第九周学习总结 教材学习内容总结 第16章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 数据库本身是个独立运行的应用程序 撰 ...

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

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

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

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

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

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

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

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

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

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

  9. 学号 20175212 《Java程序设计》第九周学习总结

    学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...

  10. 20172325 2018-2019-2 《Java程序设计》第九周学习总结

    20172325 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 图的定义 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和 ...

随机推荐

  1. Vs注释,vsXML,VSXML注释

    标签名称 说明 语法 参数 <summary> <summary> 标记应当用于描述类型或类型成员.使用<remarks> 添加针对某个类型说明的补充信息. < ...

  2. Android系统中默认值的意义列表

    转自:http://blog.csdn.net/yabg_zhi_xiang/article/details/51727844 在SettingsProvider中设置系统中默认值,我们可以在fram ...

  3. Pyqt QSS简单的Ui美化

    什么是QSS QSS 是Qt StyleSheet 的简称,意思就是qt的样式表格,StyleSheet 可以像CSS一样的写样式.使页面美化跟代码层分开,利于维护. QSS的语法 同css一样,他也 ...

  4. form表单中的submit点击时阻止提交

    在form 中增加onsubmit="return false;"属性.

  5. Linux發送郵件

    1.直接使用shell當編輯器 [root@phburdb1 mail]# mail -s "Hello World" juncai.chen@innolux.comHello j ...

  6. Win10 保存Element到相册

    保存控件到相册 private async void saveImg_Click(object sender, RoutedEventArgs e) { StorageFolder savedPics ...

  7. AgileEAS.NET SOA 中间件平台5.2版本下载、配置学习(二):配置WinClient分布式运行环境

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  8. hdu 4070 福州赛区网络赛J 贪心 ***

    优先发路程最长的 #include<cstdio> #include<iostream> #include<algorithm> #include<cstri ...

  9. 第十一篇:SOUI系统资源管理

    SOUI资源管理模块 从前篇已经讲到在SOUI中所有资源文件通过一个uires.idx文件进行索引. 这里将介绍在程序中如何引用这些资源文件. 在SOUI系统中,资源文件通过一个统一的接口对象读取: ...

  10. leetcode 1_2_3_7

    来自lknny.com,欢迎交流学习!点击 tags: [leetcode,algorithm] categories: algorithm --- Two Sum Given an array of ...