• JAVA第十周《网络编程》学习内容总结


    JAVA第十周《网络编程》学习内容总结

    学习内容总结

    1.初听到网络编程四个字可能会觉得很困难,实际上网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据,把数据发送到指定的位置,或者接收到指定的数据.

    2.路由器和交换机组成了核心的计算机网络,计算机只是这个网络上的节点以及控制等,通过光纤、网线等连接将设备连接起来,从而形成了一张巨大的计算机网络。

    3.网络最主要的优势在于共享.

    4.我们通过IP地址找到网络上的计算机,IP地址是指网络中的每个设备都会有一个唯一的数字标识.现在命名IP地址的规定是IPv4协议,该协议规定每个IP地址由4个0-255之间的数字组成,例如10.0.120.34。每个接入网络的计算机都拥有唯一的IP地址.

    5.注意!!IP地址无论以何种方式获得或是否是固定的,每个计算机在联网以后都拥有一个唯一的合法IP地址.

    6.为了方便记住IP地址,出现了域名,一个IP地址可以对应多个域名,一个域名只能对应一个IP地址

    7.在网络中传输的数据,全部是以IP地址作为地址标识,所以在实际传输数据以前需要将域名转换为IP地址,实现这种功能的服务器称之为DNS服务器

    8.端口(port)让一个计算机可以同时运行多个网络程序.端口的号码必须位于0-65535之间,每个端口唯一的对应一个网络程序,一个网络程序可以使用多个端口.

    9.网络通讯都基于“请求-响应”模型,第一次主动发起通讯的程序被称作客户端(Client)程序,简称客户端,而在第一次通讯中等待连接的程序被称作服务器端(Server)程序,简称服务器(一旦通讯建立,客户端和服务器没有本质差别.)

    10.网络编程中的两种程序就分别是客户端和服务器端,这种结构被称为客户端/服务器结构,也叫做Client/Server结构,简称C/S结构.

    -使用C/S结 构的程序,在开发时需要分别开发客户端和服务器端
    -使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构,简称为B/S结构,

    C/S和B/S的优劣:表现力丰富,通用性差,几乎不能通用(C/S)

    开发的压力比较小,不需要维护客户端,浏览器的限制比较大,表现力不强,无法进行系统级操作等(B/S)

    11.P2P(Point to Point)程序,既包含客户端程序,也包含服务器端程序.

    12.在数据交换前需要规定该数据的格式,这个数据的格式就是协议(Protocol).协议的格式随意,按照这种协议格式能够生成唯一的编码,按照该编码可以唯一的解析出发送数据的内容即可.

    -协议的设计以及协议的生产和解析,这个才是网络编程中最核心的内容
    

    13.网络通讯的方式主要有两种:

    1、 TCP(传输控制协议)方式,相当于打电话

    2、 UDP(用户数据报协议)方式,相当于发短信

    这两种方式可以单独使用,也可以合在一起使用.由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度稍微慢一些,而且传输时产生的数据量要比UDP稍微大一些

    14.客户端(Client)是指网络编程中首先发起连接的程序,一般用来实现程序界面和基本逻辑实现.客户端的编程主要由以下三方面决定:

    1.建立网络连接(需要指定连接到的服务器的IP地址和端口号)
    2.交换数据(严格按照请求响应模型进行)
    3.关闭网络连接
    

    服务器端(Server)是指在网络编程中被动等待连接的程序,服务器端的编程步骤和客户端不同,是由四个步骤实现:
    1.监听端口
    2.获得连接
    3.交换数据
    4.关闭连接

    15.和网络编程有关的基本API位于java.net包中,既包含基础的网络编程类,也包含封装后的专门处理WEB相关的处理类.以下为基础的网络类举例:

    -1.InetAddress类。(功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部)
    使用代码如下:

    ackage inetaddressdemo;
    import java.net.*;
    /**
    * 演示InetAddress类的基本使用
    */
    public class InetAddressDemo {
    public static void main(String[] args) {
    try{
    //使用域名创建对象
    InetAddress inet1 = InetAddress.getByName("www.163.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){}
    }
    }
    

    16.以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接.实际编程时,只需要指定IP地址和端口号码就可以建立连接了.

    -示例如下:
             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号端口

    OutputStream os = socket1.getOutputStream(); //获得输出流
    InputStream is = socket1.getInputStream();     //获得输入流
    ocket1.close(); //关闭网络链接
    

    17.如需在控制台上编译和运行客户端编程代码,则需以下Java命令:

    javac –d . SimpleSocketClient.java //编译
    java tcp.SimpleSocketClient  //执行
    

    18.服务器编程代码:

    ServerSocket ss = new ServerSocket(10000); //监听端口
    Socket socket = ss.accept(); //获得链接
    ss.close();  //关闭服务器链接
    

    19.一次完整的通讯过程是指:客户端程序首先发送数据给服务器端,服务器接收数据以后,将结果反馈给客户端,客户端接收到服务器端的反馈,从而完成一次通讯过程!!

    20.accept方法是阻塞方法,所以当客户端连接未到达时,将阻塞该程序的执行

    21.UDP方式的编程,包含客户端网络编程和服务器端网络编程,主要由两个类实现,分别是:

    DatagramSocket
    DatagramPacket
    

    22.客户端程序和服务器端程序需要进行协议处理的代码分别如下。

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

    常见协议的格式,例如HTTP(Hyper Text Transfer Protocol,超文本传输协议)、
    FTP(File Transfer Protocol,文件传输协议),
    SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)等等
    

    23.客户端程序功能列表:
    1、 接收用户控制台输入
    2、 判断输入内容是否合法
    3、 按照协议格式发送数据
    4、 根据服务器端的反馈给出相应提示
             服务器端程序功能列表:
    1、 接收客户端发送数据
    2、 按照协议格式解析数据
    3、 判断发送过来的数字和随机数字的关系
    4、 根据判断结果生产协议数据
    5、 将生产的数据反馈给客户端

    客户端程序协议格式如下:
    1、 将用户输入的数字转换为字符串,然后转换为byte数组
    2、 发送“quit”字符串代表退出
    其中服务器端程序协议格式如下:
    1、 反馈长度为1个字节,数字0代表相等(猜中),1代表大了,2代表小了,其它数字代表错误。
    

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

    简单的客户端编程代码,交换数据"Hello"

    package tcp;
    import java.io.*;
    import java.net.*;
    /**
    * 简单的Socket客户端
    * * 功能为:发送字符串“Hello”到服务器端,并打印出服务器端的反馈
    */
    public class SimpleSocketClient {
    public static void main(String[] args) {
    Socket socket = null;
    InputStream is = null;
    OutputStream os = null;
    //服务器端IP地址
    String serverIP = "127.0.0.1";
    //服务器端端口号
    int port = 10000;
    //发送内容
    String data = "Hello";
    try {
    //建立连接
    socket = new Socket(serverIP,port);
    //发送数据
    os = socket.getOutputStream(
    os.write(data.getBytes());
    //接收数据
    is = socket.getInputStream();
    byte[] b = new byte[1024];
    int n = is.read(b);
    //输出反馈数据
    System.out.println("服务器反馈:" + new String(b,0,n));
    } catch (Exception e) {
    e.printStackTrace(); //打印异常信息
    }finally{
    try {
    //关闭流和连接
    is.close();
    os.close();
    socket.close();
    } catch (Exception e2) {}
    }
    }
    }
    

    TCP服务器端编程:

    package tcp;
    import java.io.*;
    import java.net.*;
    /**
    * echo服务器
    * 功能:将客户端发送的内容反馈给客户端
    */
    public class SimpleSocketServer {
    public static void main(String[] args) {
    ServerSocket serverSocket = null;
    Socket socket = null;
    OutputStream os = null;
    InputStream is = null;
    //监听端口号
    int port = 10000;
    try {
    //建立连接
    serverSocket = new ServerSocket(port);
    //获得连接
    socket = serverSocket.accept();
    //接收客户端发送内容
    is = socket.getInputStream();
    byte[] b = new byte[1024];
    int n = is.read(b);
    //输出
    System.out.println("客户端发送内容为:" + new String(b,0,n));
    //向客户端发送反馈内容
    os = socket.getOutputStream();
    os.write(b, 0, n);
    } catch (Exception e) {
    e.printStackTrace();
    }finally{
    try{
    //关闭流和连接
    os.close();
    is.close();
    socket.close();
    serverSocket.close()
    }catch(Exception e){}
    }
    }
    }
    

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

    用到的包之前在学习时大多没有遇到过,所以比较陌生,不知道每个包代表什么含义,后来通过查资料,了解了每个包的作用,才逐渐清晰.

    本周代码托管截图

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

    此次学习内容和这学期的计算机网络内容较为接近,只是多了实际的JAVA语言操作部分,但通过这些基础知识的学习,再看抽象的Java代码就更能理解了.

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积 学习时间(新增/累积) 重要成长
    目标 5000行 20篇 200小时
    第一周 100/100 1/1 7/7
    第二周 200/300 1/2 7/14
    第三周 400/700 1/3 9/23
    第四周 400/1100 1/4 7/30
    第五周 500/1600 1/5 9/39
    第六周 400/2000 2/7 15/54
    第七周 700/2700 2/9 17/71
    第八周 500/3200 2/11 12/83
    第九周 350/3550 2/13 10/93
    第十周 700/4250 2/15 06/99

    参考资料

  • 相关阅读:
    C# CheckBoxList数据操作(转) 子曰
    extjs获取后台数据(asp.net) 子曰
    PHP学习系列之 环境配置
    Javah生成JNI头文件
    [转] ubuntu 终端命令
    我开博的这一年
    [原]Java web学习系列之 Java web开发中的Hibernate对象关系映射框架
    [原]Java web学习系列之开篇
    [原]android camera中的预览图片变形的解决办法
    [原]Java web学习系列之 Java web开发中数据库连接几种方法
  • 原文地址:https://www.cnblogs.com/cy1123/p/5472191.html
Copyright © 2020-2023  润新知