20145330第十周《Java学习笔记》###

网络编程

  • 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据。程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴。在发送和接收数据时,大部分的程序设计语言都设计了专门的API实现这些功能,程序员只需要调用即可。所以,基础的网络编程可以和打电话一样简单。

13.1 网络概述

  • 网 络编程技术是当前一种主流的编程技术,随着联网趋势的逐步增强以及网络应用程序的大量出现,所以在实际的开发中网络编程技术获得了大量的使用。
  • 13.1.1 计算机网络概述
    • 网络编程的实质就是两个(或多个)设备(例如计算机)之间的数据传输。
    • 按照计算机网络的定义,通过一定的物理设备将处于不同位置的计算机连接起来组成的网络,这个网络中包含的设备有:计算机、路由器、交换机等等
    • IP地址和域名很好的解决了在网络中找到一个计算机的问题,但是为了让一个计算机可以同时运行多个网络程序,就引入了另外一个概念——端口(port)。
  • 13.1. 2 网络编程概述
    • 按照前面的介绍,网络编程就是两个或多个设备之间的数据交换,其实更具体的说,网络编程就是两个或多个程序之间的数据交换,和普通的单机程序相比,网络程序最大的不同就是需要交换数据的程序运行在不同的计算机上,这样就造成了数据交换的复杂。虽然通过IP地址和端口可以找到网络上运行的一个程序,但是如果需要进行网络编程,则还需要了解网络通讯的过程。
    • 由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度稍微慢一些,而且传输时产生的数据量要比UDP稍微大一些。

13.2 网络编程技术

  • 13.2.1 网络编程步骤

    • 按照前面的基础知识介绍,无论使用TCP方式还是UDP方式进行网络通讯,网络编程都是由客户端和服务器端组成。当然,B/S结构的编程中只需要实现服务器端即可。所以,下面介绍网络编程的步骤时,均以C/S结构为基础进行介绍。

      • 13.2.1.1 客户端网络编程步骤

        • 1、 建立网络连接
        • 2、 交换数据
        • 3、 关闭网络连接
      • 13.2.1.2 服务器端网络编程步骤
        • 1、 监听端口
        • 2、 获得连接
        • 3、 交换数据
        • 4、 关闭连接
      • 13.2.1.3 小结
        • 总之,无论使用任何语言,任何方式进行基础的网络编程,都必须遵循固定的步骤进行操作,在熟悉了这些步骤以后,可以根据需要进行逻辑上的处理,但是还是必须遵循固定的步骤进行。
  • 13.2.2 Java网络编程技术

    • 首先来介绍一个基础的网络类——InetAddress类。该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。
    • 关于该类的使用,下面通过一个基础的代码示例演示该类的使用,代码如下:

  1. package inetaddressdemo;
  2. import java.net.*;
  3. public class InetAddressDemo {
  4. public static void main(String[] args) {
  5. try{
  6. //使用域名创建对象
  7. InetAddress inet1 = InetAddress.getByName("www.163.com");
  8. System.out.println(inet1);
  9. //使用IP创建对象
  10. InetAddress inet2 = InetAddress.getByName("127.0.0.1");
  11. System.out.println(inet2);
  12. //获得本机地址对象
  13. InetAddress inet3 = InetAddress.getLocalHost();
  14. System.out.println(inet3);
  15. //获得对象中存储的域名
  16. String host = inet3.getHostName();
  17. System.out.println("域名:" + host);
  18. //获得对象中存储的IP
  19. String ip = inet3.getHostAddress();
  20. System.out.println("IP:" + ip);
  21. }catch(Exception e){}
  22. }
  23. }
  • 在该示例代码中,演示了InetAddress类的基本使用,并使用了该类中的几个常用方法,该代码的执行结果是:

  1. www.163.com/220.181.28.50
  2. /127.0.0.1
  3. chen/192.168.1.100
  4. 域名:chen
  5. IP:192.168.1.100
  • 说明:由于该代码中包含一个互联网的网址,所以运行该程序时需要联网,否则将产生异常。

  • 13.2.3 TCP编程

  • 在使用TCP方式进行网络编程时,需要按照前面介绍的网络编程的步骤进行,下面分别介绍一下在Java语言中客户端和服务器端的实现步骤。

  • 这就是最基本的网络编程功能介绍。下面是一个简单的网络客户端程序示例,该程序的作用是向服务器端发送一个字符串“Hello”,并将服务器端的反馈显示到控制台,数据交换只进行一次,当数据交换进行完成以后关闭网络连接,程序结束。实现的代码如下:


  1. package tcp;
  2. import java.io.*;
  3. import java.net.*;
  4. public class SimpleSocketClient {
  5. public static void main(String[] args) {
  6. Socket socket = null;
  7. InputStream is = null;
  8. OutputStream os = null;
  9. //服务器端IP地址
  10. String serverIP = "127.0.0.1";
  11. //服务器端端口号
  12. int port = 10000;
  13. //发送内容
  14. String data = "Hello";
  15. try {
  16. //建立连接
  17. socket = new Socket(serverIP,port);
  18. //发送数据
  19. os = socket.getOutputStream();
  20. os.write(data.getBytes());
  21. //接收数据
  22. is = socket.getInputStream();
  23. byte[] b = new byte[1024];
  24. int n = is.read(b);
  25. //输出反馈数据
  26. System.out.println("服务器反馈:" + new String(b,0,n));
  27. } catch (Exception e) {
  28. e.printStackTrace(); //打印异常信息
  29. }finally{
  30. try {
  31. //关闭流和连接
  32. is.close();
  33. os.close();
  34. socket.close();
  35. } catch (Exception e2) {}
  36. }
  37. }
  38. }
  • 这是一个简单的功能示例,在该示例中演示了TCP类型的网络客户端基本方法的使用,该代码只起演示目的,还无法达到实用的级别。

    • 实际上,可以通过logging.properties来设定logging组态,这样就很方便。
  • 在Java API中,实现UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:
    • l DatagramSocket

      • DatagramSocket类实现“网络连接”,包括客户端网络连接和服务器端网络连接。
    • l DatagramPacket
      • DatagramPacket类实现对于网络中传输的数据封装,也就是说,该类的对象代表网络中交换的数据。

网络协议

  • 网络协议是指对于网络中传输的数据格式的规定。对于网络编程初学者来说,没有必要深入了解TCP/IP协议簇,所以对于初学者来说去读大部头的《TCP/IP协议》也不是一件很合适的事情,因为深入了解TCP/IP协议是网络编程提高阶段,也是深入网络编程底层时才需要做的事情。

  • 网络协议设计完成以后,在进行网络编程时,就需要根据设计好的协议格式,在程序中进行对应的编码了,客户端程序和服务器端程序需要进行协议处理的代码分别如下。

    • 客户端程序需要完成的处理为

      • 1、 客户端发送协议格式的生成
      • 2、 服务器端反馈数据格式的解析
    • 服务器端程序需要完成的处理为:
      • 1、 服务器端反馈协议格式的生成
      • 2、 客户端发送协议格式的解析
  • 13.2.6小结

    • 关于网络编程基本的技术就介绍这么多,该部分介绍了网络编程的基础知识,以及Java语言对于网络编程的支持,网络编程的步骤等,并详细介绍了TCP方式网络编程和UDP方式网络编程在Java语言中的实现。
  • 13.3.1质数判别示例

    • 该示例实现的功能是质数判断,程序实现的功能为客户端程序接收用户输入的数字,然后将用户输入的内容发送给服务器端,服务器端判断客户端发送的数字是否是质数,并将判断的结果反馈给客户端,客户端根据服务器端的反馈显示判断结果。
  • 总体来说,该程序示例的结构以及功能都与上一个程序比较类似,希望通过比较这两个程序,加深对于网络编程的认识,早日步入网络编程的大门。

学习中的问题和解决方法

  • 1、如何复用Socket连接?
  • 在前面的示例中,客户端中建立了一次连接,只发送一次数据就关闭了,这就相当于拨打电话时,电话打通了只对话一次就关闭了,其实更加常用的应该是拨通一次电话以后多次对话,这就是复用客户端连接。
  • 2、如何使服务器端支持多个客户端同时工作?
  • 一个服务器端一般都需要同时为多个客户端提供通讯,如果需要同时支持多个客户端,则必须使用前面介绍的线程的概念。简单来说,也就是当服务器端接收到一个连接时,启动一个专门的线程处理和该客户端的通讯。

学习感受

总体来说,该程序示例的结构以及功能都与上一个程序比较类似,希望通过比较这两个程序,加深对于网络编程的认识,早日步入网络编程的大门。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第九周 200/2300 2/19 20/168
第十周 100/2400 2/21 20/188

20145330第十周《Java学习笔记》的更多相关文章

  1. 第十周java学习总结

    目录 第十周java学习总结 学习内容 代码上传截图 代码链接 第十周java学习总结 学习内容 第12章 Java多线程机制 主要内容 Java中的线程 Thread类与线程的创建 线程的常用方法 ...

  2. 20145231第二周Java学习笔记

    20145231 <Java程序设计>第2周学习总结 教材学习内容总结 本周的学习采用的依然是先看课本,再看视频,然后实践敲代码,最后根据学习笔记总结完成博客. 第三章:基础语法 知识点比 ...

  3. 2017-04-21周Java学习笔记

    2017-04-21-周Java学习笔记... -------------------------------------- 计算机起源于:战争中的炮弹轨道计算.Unix操作系统是使用C语言编写的操作 ...

  4. 20145307第十周JAVA学习报告

    教材学习内容总结 Java的网络编程 1.计算机网络概述 (1)路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控制等,通过光纤.网线等连接将设备连接起来,从而形成了一张巨大的计算 ...

  5. 第十周java 学习总结

    20145306 java的网络编程 网络概述 网络编程技术是当前一种主流的编程技术,随着联网趋势的逐步增强以及网络应用程序的大量出现,所以在实际的开发中网络编程技术获得了大量的使用.至于以后的实际修 ...

  6. 《第六周java学习笔记》

    教材知识点总结 Java 把 String 类定义为 final 类. new 运算符首先分配内存空间并在内存空间中放入字符序列,然后计算出引用.(new String(char a[],int st ...

  7. 20165319第五周java学习笔记

    教材内容总结 1.String类和StringBuffer类都覆盖了toString方法,都是返回字符串. 所以带不带toString效果是一样的. 2.instanceOf运算符可以用来判断某个对象 ...

  8. 第十周LINUX 学习笔记

    LVS集群nat丶DR HA:高可用    平均无故障时间/(平均无故障时间+平均修复时间)        负载均衡 次序lb(负载)——>ha()LB  tcp:lvs,haproxy  应用 ...

  9. 20145330第九周《Java学习笔记》

    20145330第九周<Java学习笔记> 第十六章 整合数据库 JDBC入门 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JD ...

随机推荐

  1. SQL常用方言列表

    DB2 org.hibernate.dialect.DB2Dialect DB2 AS/400 org.hibernate.dialect.DB2400Dialect DB2 OS390 org.hi ...

  2. ASP.NET 5探险(7):使用混合型控制器方便实现单页应用

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于在ASP.NET 5中,MVC和WEB API的技术栈合并了,所以开发混合型Con ...

  3. bbed的使用--查看数据文件信息 & sid信息

    1.得到文件的块大小和数据块个数 在Linux和Unix上,oracle提供了一个小工具dbfsize用于查看文件块大小 (可以参看[ID:360032.1]How to detect and fix ...

  4. 【maven + hibernate(注解) +spring +springMVC】 使用maven搭建项目

    研究,百度,查资料+好友帮助,使用MyEcplise2015工具,通过maven搭建hibernate+springMVC+spring的项目,数据库采用MySql5.5 不过使用的版本会在项目搭建过 ...

  5. android如何实现文件按时间先后顺序排列显示

    <span style="font-size:18px;">File[] files =parentFile.listFiles(fileFilter);//通过fil ...

  6. 关于C/C++中数组元素的初始化

      1.一维数组初始化 对于一维数组,其初始化有一个错误的观点是:一直以为 int a[256]={0};是把a的所有元素初始化为0,int a[256]={1};是把a所有的元素初始化为1. 数组可 ...

  7. Liferay 6.2 改造系列之二十一:修改WebSphare下JSONWS服务不生效的BUG

    问题原因是WebSphare下,servletContext.getContextPath()获取到的值为“/”而非空字符串. 在/portal-master/portal-impl/src/com/ ...

  8. Linux环境变量设置指南

    以配置java环境变量为例 目录 [隐藏]  1 修改/etc/profile文件 2 修改用户目录下的.bash_profile 3 修改.bashrc文件 4 直接在shell下设置 5 查看环境 ...

  9. Visual Studio vs软件下载 vax Visual Assist X VAssistX

    Visual_Studio_2008_Team_Suite简体中文正式版及补丁下载链接:http://pan.baidu.com/s/1jGvOotg 密码:y6ic Visual Studio 20 ...

  10. u盘中放入大于4g单独文件失败解决

    u盘中文件格式通常为FAT32,需要转换为NTFS格式 在win7中cmd调出命令行,输入: convert H: /fs:ntfs (H为u盘位置)