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. ajax请求加全局loading , 个别特殊请求不显示loading

    项目中,请求开始前加载loading遮罩层,请求结束关闭遮罩,一般都会加在全局中,但有个别请求不需要加全局loading 的话,这时候就需要对这些请求进行配置 全局加loading: ; functi ...

  2. 如何使用java指令执行含package的class文件

    代码文件存放在E:/Temp/JAVA_TEMP/tmp文件夹,代码如下: package tmp; public class Temp { public static void main(Strin ...

  3. 在虚拟机中的搭建Web服务器(CentOS)

    1.制作本地yum源 相关可查看:http://www.cnblogs.com/xiaomingzaixian/p/8424290.html 2.安装JDK 上传上传jdk-7u45-linux-x6 ...

  4. Mysql日常操作

    创建用户并授权 grant all privileges on test.* to "test"@"localhost" identified by " ...

  5. Flask之flask-script

    简介 Flask-Scropt插件为在Flask里编写额外的脚本提供了支持.这包括运行一个开发服务器,一个定制的Python命令行,用于执行初始化数据库.定时任务和其他属于web应用之外的命令行任务的 ...

  6. java实现简单的数据库的增删查改,并布局交互界面

        一.系统简介 1.1.简介  本系统提供了学生信息管理中常见的基本功能,主要包括管理员.管理员的主要功能有对学生信息进行增加.删除.修改.查找等操作,对信息进行管理,对信息进行修改.查找等操作 ...

  7. 关于android:windowNoTitle不起作用的解决办法

    今天测试一个新功能的时候,在styles.xml设置<item name="android:windowNoTitle">true</item>并没有生效, ...

  8. linux使用nohup命令后台运行程序

    在linux服务器上搭建web服务器,用ssh客户端登陆后使用./startservice.sh脚本启动服务,但是当ssh断开连接后起的服务也会停掉. 这时可以用nohup ./startservic ...

  9. 谷歌浏览器Chrome错误提示Flash过期怎么办(转)

    在使用谷歌浏览器Chrome时,会碰到谷歌浏览器Chrome的错误提示:“Adobe Flash Player因过期而遭到阻止”,点击“更新插件”是不行的,国内的网络根本就打不开,点击“运行一次”是可 ...

  10. UVA10954:Add All(优先队列)

    题目:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=68990#problem/O 题目需求:在数组中拿出两个数相加,再把结果放回数组中再 ...