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

教材学习内容总结

网络编程

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

IP地址与端口

·网络中的每个设备都会有一个唯一的数字标识,这个就是IP地址
·在计算机网络中,现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成
·一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。
·当用户在浏览器输入域名时,浏览器首先请求DNS服务器,将域名转换为IP地址,然后将转换后的IP地址反馈给浏览器,然后再进行实际的数据传输。
·为了让一个计算机可以同时运行多个网络程序,就引入了另外一个概念——端口(port) 前台总机的电话号码就相当于IP地址,而每个员工的分机号就相当于端口

网络编程的两种模型

·网络编程中的两种程序就分别是客户端和服务器端
·客户端/服务器结构,也叫做Client/Server结构,简称C/S结构。
·使用C/S结 构的程序,在开发时需要分别开发客户端和服务器端 在实际维护时,也需要维护专门的客户端和服务器端,维护的压力比较大。
使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构。 P2P程序是一种特殊的程序,应该一个P2P程序中既包含客户端程序,也包含服务器端程序

IP协议(Protocol)

在实际的网络程序编程中,最麻烦的内容不是数据的发送和接收,因为这个功能在几乎所有的程序语言中都提供了封装好的API进行调用,最麻烦的内容就是协议的设计以及协议的生产和解析,这个才是网络编程中最核心的内容。
网络协议就是一种格式上的约定,在进行设计时一般遵循“简单、通用、容易解析”的原则进行。

网络通讯方式

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

网络编程步骤

客户端网络编程的步骤:1、建立网络连接 2、交换数据 3、关闭网络连接
服务器端网络编程步骤:1、监听端口 2、获得连接 3、交换数据 4、关闭连接

Socket socket1 = new Socket(“192.168.205.1”,10000);

Socket socket2 = new Socket(“www.baidu.com”,80);

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

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

socket1.close();

socket2.close();

Java网络编程技术

TCP与UDP方式编程
和网络编程有关的基本API位于java.net包中
在客户端网络编程中,首先需要建立连接,在Java API中以java.net.Socket类的对象代表网络连接,所以建立客户端网络连接,也就是创建Socket类型的对象,该对象代表网络连接
建立完对象后,分别从socket这个连接对象获得了输出流和输入流对象,在整个网络编程中,后续的数据交换就变成了IO操作,也就是遵循“请求-响应”模型的规定,先向输出流中写入数据,这些数据会被系统发送出去,然后在从输入流中读取服务器端的反馈信息,这样就完成了一次数据交换过程
accept和前面IO部分介绍的read方法一样,都是一个阻塞方法,也就是当无连接时,该方法将阻塞程序的执行,直到连接到达时才执行该行代码。
实现建立一次连接,进行多次数据交换:建立连接以后,将数据交换的逻辑写到一个循环中就可以了。这样只要循环不结束则连接就不会被关闭。

服务器端支持多个客户端同时工作

一个服务器端一般都需要同时为多个客户端提供通讯,如果需要同时支持多个客户端,则必须使用前面介绍的线程的概念。简单来说,也就是当服务器端接收到一个连接时,启动一个专门的线程处理和该客户端的通讯。
UDP(User Datagram Protocol),中文意思是用户数据报协议,方式类似于发短信息,是一种物美价廉的通讯方式,使用该种方式无需建立专用的虚拟连接,由于无需建立专用的连接,所以对于服务器的压力要比TCP小很多
在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现 DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。 DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。
UDP方式的建立连接和TCP方式不同,只需要建立一个连接对象即可,不需要指定服务器的IP和端口号码。实现的代码为:

               DatagramSocket ds = new DatagramSocket();

代码调试中的问题和解决过程

用百度测试了一下InetAddress类

package com.company;import java.net.*;
public class Main {    public static void main(String[] args) {        try{            //使用域名创建对象            InetAddress inet1 = InetAddress.getByName("www.baidu.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){}    }}


学习进度条

  代码行数(新增/累积 博客量(累积/目标) 学习时间 估算学习时间 实际学习时间 重要成长
目标 5000行 30篇 400小时      
第一周 150/150 2/2 15      
第二周 500/650 3/4 15      
第三周 500/1150 4/5 14    

第四周 600/1750 5/6 15      
第五周 500/2250 6/7 9      这周学得不咋样......
第六周 300/2350 7/8 10     学得还是不实,但是比上周好了一些
第七周

300/2650

这周写了300行左右的代码(包括实验),

有些代码是直接粘贴运行了一下看了下结果

10/10

8h~9h

  10h

 8h~9h  

这周的学习内容主要是时间、日期相关类的应用,

相对于前面几章简单了一些,

实际学习时间相比于估算学习时间少了一些,

看书所花的时间与估算差不多,

但是写代码、调试、进行实际操作应用,

学习java实验相关调试技巧、测试技巧的时间还是少了些,还是有点懒。

第八周

400/3050

12/12

 8h

9h  

  8h

java后面都是类的使用,不实际操作肯定是不许的,动手还是少了些,

纸上得来终觉浅,应该积极主动地去多敲代码

第九周

300/3350

14/14

 11h

  10h

  11h

数据库这块不怎么能理解,挺抽象的

第十周

200/3550

16/16

 8h

  8h

  8h

这周有关网络编程方面的学习内容,真正实现了客户端与服务器端交互的

一个功能

参考资料

最新文章

  1. R语言自动化
  2. ubuntu环境下使用apt-get配置apache+php+mysql
  3. 关于GPL的一些知识
  4. Java基础知识强化之多线程笔记03:进程与线程 和 多线程的意义
  5. awk合并文件一例
  6. curl+个人证书(又叫客户端证书)访问https站点
  7. lua学习笔记1
  8. CSS3框架!
  9. IDEA 2017注册码破解方法(转)
  10. c++---天梯赛---查验身份证
  11. Git篇(基础)
  12. spark DataFrame 读写和保存数据
  13. 2018-2019-2 网络对抗技术 20162329 Exp5 MSF基础应用
  14. DjangoRestFramework学习三之认证组件、权限组件、频率组件、url注册器、响应器、分页组件
  15. BZOJ1023:[SHOI2008]cactus仙人掌图(圆方树,DP,单调队列)
  16. MyBatis基础入门《十五》ResultMap子元素(collection)
  17. C#——LINQ语句
  18. windows下Git的使用教程(github)
  19. CISCO ASA 5505 经典配置案例
  20. Python2.7-stat

热门文章

  1. IP地址转、整数互相转换
  2. CVE-2017-1000117命令注入验证
  3. redis未授权访问漏洞那拿SHELL
  4. Express 框架的安装
  5. Sublime Less 自动编译成css
  6. Swift - 多线程GCD详解
  7. Spring应用配置文件上传的两种方案
  8. Meaning of “const” last in a C++ method declaration?
  9. Sum It Up---poj1564(dfs)
  10. BaseLayout