zoukankan      html  css  js  c++  java
  • 20145203盖泽双 《Java程序设计》第十周学习总结

    20145203盖泽双 《Java程序设计》第十周学习总结

    教材学习内容总结

    一、网络概述

    1、网络编程就是两个或多个设备(程序)之间的数据交换。

    2、识别网络上的每个设备:①IP地址②域名(Domain Name)。一个IP地址可以对应多个域名,一个域名只能对应一个IP地址。

    3、DNS服务器(域名解析):在实际传输数据以前需要将域名转换为IP地址。

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

    5、C/S结构:网络编程的结构被称作客户端/服务器结构,也叫做Client/Server结构。

    6、B/S结构:使用浏览器作为客户端的结构被称作浏览器/服务器结构,也叫做Browser/Server结构。B/S结构其实也就是一种特殊的C/S结构。

    7、P2P程序:P2P程序中既包含客户端程序,也包含服务器端程序,是一种特殊的程序。

    8、协议(Protocol):在实际进行数据交换时,为了让接收端理解该数据,计算机比较笨,什么都不懂的,那么就需要规定该数据的格式,这个数据的格式就是协议。

    那么如何来编写协议格式呢?答案是随意。只要按照这种协议格式能够生成唯一的编码,按照该编码可以唯一的解析出发送数据的内容即可。也正因为各个网络程序之间协议格式的不同,所以才导致了客户端程序都是专用的结构。

    9、在现有的网络中,网络通讯的方式主要有两种:
    ①TCP(传输控制协议)方式
    ②UDP(用户数据报协议)方式

    二、网络编程技术

    1、客户端的编程主要由三个步骤实现:

    ①建立网络连接:在建立网络连接时需要指定连接到的服务器的IP地址和端口号。(出现重复)

    ②交换数据:交换数据严格按照请求响应模型进行。

    ③关闭网络连接。

    2、服务器端的编程是由四个步骤实现,依次是:

    ①监听端口:这个端口就是服务器端开放给客户端的端口,服务器端程序运行的本地计算机的IP地址就是服务器端程序的IP地址。

    2、 获得连接:服务器端和客户端也通过该连接进行数据交换。一般获得连接时,需要开启专门的线程处理该连接,每个连接都由独立的线程实现。

    3、 交换数据。

    4、 关闭连接。

    5、InetAddress类:该类的功能是代表一个IP地址,并且将IP地址和域名相关的操作方法包含在该类的内部。

    6、TCP方式的网络编程实现时,以java.net.Socket类代表客户端连接,以java.net.ServerSocket类代表服务器端连接。由于高度的封装,程序员实际编程时,只需要指定IP地址和端口号码就可以建立连接了。一方面简化了Java语言网络编程的难度,另外也使得Java语言进行网络底层系统编程很困难,具体点说,Java语言无法实现底层的网络嗅探以及获得IP包结构等信息。

    7、实现服务器端监听的代码为:

         ServerSocket ss = new ServerSocket(10000);
    

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

    ①DatagramSocket:实现“网络连接”,包括客户端网络连接和服务器端网络连接。DatagramSocket实现的就是发送数据时的发射器,以及接收数据时的监听器的角色。类比于TCP中的网络连接,该类既可以用于实现客户端连接,也可以用于实现服务器端连接。

    ②DatagramPacket:实现对于网络中传输的数据封装,该类的对象代表网络中交换的数据。在UDP方式的网络编程中,无论是需要发送的数据还是需要接收的数据,都必须被处理成DatagramPacket类型的对象,该对象中包含发送到的地址、发送到的端口号以及发送的内容等。和TCP方式的网络传输相比,IO编程在UDP方式的网络编程中变得不是必须的内容,结构也要比TCP方式的网络编程简单一些。

    三、质数判别示例

    1、 网络程序的功能都分为客户端程序和服务器端程序实现,下面先描述一下每个程序分别实现的功能:

    1、 客户端程序功能:

    a) 接收用户控制台输入

    b) 判断输入内容是否合法

    c) 按照协议格式生成发送数据

    d) 发送数据

    e) 接收服务器端反馈

    f) 解析服务器端反馈信息,并输出

    2、 服务器端程序功能:

    a) 接收客户端发送数据

    b) 按照协议格式解析数据

    c) 判断数字是否是质数

    d) 根据判断结果,生成协议数据

    e) 将数据反馈给客户端

    四、猜数字小游戏

    客户端程序功能列表:

    ① 接收用户控制台输入

    ② 判断输入内容是否合法

    ③ 按照协议格式发送数据

    ④ 根据服务器端的反馈给出相应提示

         服务器端程序功能列表:
    

    ① 接收客户端发送数据

    ② 按照协议格式解析数据

    ③ 判断发送过来的数字和随机数字的关系

    ④ 根据判断结果生产协议数据

    ⑤ 将生产的数据反馈给客户端

         其中客户端程序协议格式如下:
    

    1、 将用户输入的数字转换为字符串,然后转换为byte数组

    2、 发送“quit”字符串代表退出

         其中服务器端程序协议格式如下:
    

    1、 反馈长度为1个字节,数字0代表相等(猜中),1代表大了,2代表小了,其它数字代表错误。

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

    1、如何复用Socket连接?

    ``
    package tcp;

    import java.io.*;

    import java.net.*;

    /**

    • 复用连接的echo服务器

    • 功能:将客户端发送的内容反馈给客户端

    */

    public class MulSocketServer {

         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);
    
                            System.out.println("服务器已启动:");
    
                            //获得连接
    
                            socket = serverSocket.accept();
    
                            //初始化流
    
                            is = socket.getInputStream();
    
                            os = socket.getOutputStream();
    
                            byte[] b = new byte[1024];
    
                            for(int i = 0;i < 3;i++){
    
                                     int n = is.read(b);
    
                                     //输出
    
                                     System.out.println("客户端发送内容为:" + new String(b,0,n));
    
                                     //向客户端发送反馈内容
    
                                     os.write(b, 0, n);
    
                            }
    
                   } catch (Exception e) {
    
                            e.printStackTrace();
    
                   }finally{
    
                            try{
    
                                     //关闭流和连接
    
                                     os.close();
    
                                     is.close();
    
                                     socket.close();
    
                                     serverSocket.close();
    
                            }catch(Exception e){}
    
                   }
    
         }
    

    }

    ``

    2、如何使服务器端支持多个客户端同时工作?

    解决方法:改善服务端示例程序将由两个部分组成,MulThreadSocketServer类实现服务器端控制,实现接收客户端连接,然后开启专门的逻辑线程处理该连接,LogicThread类实现对于一个客户端连接的逻辑处理,将处理的逻辑放置在该类的run方法中。

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

    1、问题:

    解决方法:因为我电脑中没有这个类的包,可以把包名删掉,或者加一个包。

    本周代码托管截图

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 200/200 2/2 20/20
    第二周 300/500 2/4 18/38
    第三周 500/1000 3/7 22/60
    第四周 300/1300 2/9 30/90
    第十周 700/3300 2/13 40/130

    参考资料

  • 相关阅读:
    oracle中varchar2和nvarchar2的区别
    Hbuilder与夜神连接
    BUILD 2015: Visual Studio对GitHub的支持
    Visual Studio Developer Assistant 3月新功能展示
    Visual Studio 发布新版API智能提示
    微软发布手机版 Sample Browser。7000多示例代码一手掌握
    微软 PowerShell Script Explorer 满血复活,正式发布
    IBM的“认知计算时代”
    最新 Windows 10 应用项目模板发布
    Windows 10四大版本区别详解:家庭版, 专业版, 企业版和教育版
  • 原文地址:https://www.cnblogs.com/GZSdeboke/p/5469255.html
Copyright © 2011-2022 走看看