zoukankan      html  css  js  c++  java
  • 201521123075 《Java程序设计》第13周学习总结

    1. 本周学习总结

    • 协议
      网络中为了进行数据交换(通信)而建立的规则、标准或约定(=语义+语法+规则),比如http, ftp等
    • IP层协议(Internet Protocol)
      Internet上的计算机通过IP地址进行标识,如果想在网络上进行通信,首先要使用IP地址找到对方。
    • 套接字(socket)通信
      网络上两个程序通过一个双向通信链路实现数据交换,这个双向链路的一端称为一个Socket,Socket通常用来实现客户端和服务器端的连接。
      对从Socket对象中获得的流进行操作,即可进行网络通信。
      使用Socket进行网络通信的特点:通过socket上的输入、输出流,几乎可以进行所有网络通信,但使用起来相对复杂。并且使用Socket连接总是使用TCP协议
    • 服务器ServerSocket
      不负责与客户端的具体通信!具有accept方法,并用方法监听端口,等待网络请求连接,返回Socket对象。
    • URL与Socket的关系
      使用Socket和Web服务器建立连接,必须自己发送HTTP请求。
      URL类可以和Web服务器直接进行交互,里面封装了使用HTTP协议通信的细节。

    2. 书面作业

    1. 网络基础

    1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同?


    • 不同:返回结果最明显不同为时间,ping cec.jmu.edu.cn用时远小于ping www.baidu.com。
    • 因为我们与cec.jmu.edu.cn服务器的距离远小于我们与www.baidu.com服务器的距离。

    1.2 telnet bbs.newsmth.net,上面这条命令连接的是远程主机的什么端口号?

    答:连接的远程主机的端口号是23。
    

    1.3 telnet cec.jmu.edu.cn 80,尝试回答:你从屏幕看到一些什么内容?返回的内容是不是cec.jmu.edu.cn的主页内容?尝试使用GET /index HTTP/1.0命令,会返回什么?详见实验任务书题目1。

    • 屏幕上没有内容,返回的内容不是cec.jmu.edu.cn的主页内容;使用GET /index HTTP/1.0命令后,返回结果如上第二幅图。

    1.4 启动ConnectionWatcher, 然后启动若干个可以联网的程序(如QQ, telnet,浏览器等),查看本机上有什么程序联网,使用了什么端口?QQ占用了什么端口和那些远程IP进行交互,这些IP分布地在那里?使用了什么协议进行通信?

    • QQ占用的端口有443(https),80(http)端口。使用TCP协议。而IP分布地如下:

    1.5 编写网络程序必不可少的几个信息是什么?

    答:IP,协议,域名,端口号。
    

    参考:实验任务书-题目1

    2. 编写TCP客户端程序

    2.1 参照SocketTest.java编写一个简单的连接远程服务器小程序Client.java,可以接收并显示服务器发送的信息。启动时需要首先在控制台指定远程主机IP与端口号。(截图,出现自己学号)

    2.2 将程序中的网址改成bbs.newsmth.net,端口号改为23,再次观察返回结果?尝试执行telnet bbs.newsmth.net 23,对比返回结果。

    2.3 将程序中的网址改成cec.jmu.edu.cn,端口号改为80进一步观察返回结果。没有任何返回结果,为什么?怎么操作

    答:在HTTP请求中, 第一行必须是一个请求行, 用来说明请求类型。
        需要使用get请求获取html文档。
    

    2.4 启动网络调试助手,将其设置为TCP Server,并启动,如下图所示


    尝试使用Client.java连接该TCP Server,使用该服务器向Client发送信息。(截图)

    2.5 回答:现在的Client.java只能接收信息,能否改造Client.java使其可以与服务器进行交互(服务器可以发送信息给Client,Client也可发送信息给服务器),写出大概思路即可。

    • 基于2.4的操作,若要实现多次传输信息,要使用多线程
    • 线程1:实现 Client->服务器 传送信息
    • 线程2:实现 服务器->Client 传送信息

    参考:实验任务书-题目2

    3. ServerSocket与TCP服务器

    3.1 简易单线程MenuServer,题目3.1-3.4。(关键代码及运行截图,包含学号)可以使用网络调试助手,将其设置为TCP Client(IP与端口填你的MenuServer的IP与端口),连接你的MenuServer。其中的文件搜索功能为选做。

    3.2 多线程MenuServer(截图证明你这个是多线程服务器,使用telnet连接)。

    参考:实验任务书-题目3
    参考:EchoServer.java,ThreadedEchoServer.java (多线程服务器)

    4. UDP服务器

    4.1 改造3.1或3.2,将其改造成基于UDP的MenuServer。(运行界面代码截图,包含学号)。可以使用网络调试助手,将其设置为UDP,要填本机IP与端口也要填远程服务器的IP与端口。

    参考:UDPServer.java

    5. 论述题:网络程序与流

    5.1 前面编写的程序用到了大量的流的相关知识。简述,编写网络程序时应当选择什么样的流?Java网络编程、流之间的关系。场景如:简单的文字聊天、文件传输、应用层协议服务器,如QQ、聊天室、网络游戏。

    • 应该选择InputStream和OutputStream两种流,对于socket而言,如果要向服务器发信息,那么用outputStream,从服务器得到信息就用inputstream

    6. 代码阅读

    阅读ServerAndThread目录中的源代码

    6.1 修改程序,在GUI界面中某个地方显示自己的学号,然后运行该程序(截图、出现学号)。简述这个程序的主要功能。

    6.2 画出源代码的结构图(各个类的依赖关系)。并简要说明各个类的功能。

    6.3 简述这个程序有什么不足之处及改进方法.

    3. 码云

    码云代码提交记录

  • 相关阅读:
    HBase with MapReduce (MultiTable Read)
    HBase with MapReduce (SummaryToFile)
    HBase with MapReduce (Summary)
    HBase with MapReduce (Read and Write)
    HBase with MapReduce (Only Read)
    Hbase中的BloomFilter(布隆过滤器)
    HBase的快照技术
    How To Use Hbase Bulk Loading
    Cloudera-Manager修改集群的IP
    Java中的HashSet和TreeSet
  • 原文地址:https://www.cnblogs.com/tt1104/p/6886169.html
Copyright © 2011-2022 走看看