Java第14周作业

1.本周学习总结

1.1以你喜欢的方式(思维导图、OneNote或其他)归纳总结多网络相关内容。

  • Socket类(用户类)的一般操作步骤:
    | - 通过new关键字或者ServerSocket类中的accpet()方法建立Socket对象,指定连接服务器的ip和端口
    | - 通过getInputStream,getOutputStream方法获取Socket对象的输入流和输出流
    | - 进行流的操作,eg:ScannerPrintWriter的使用。
    | - close()方法关闭资源操作。
  • ServerSocket类(服务器类)的一般操作步骤
    | - new新建一个ServerSocket对象,指定开启的端口号
    | - 使用accept()方法获取连接的用户(Socket对象)
    | - 使用getInputStream,getOutputStream方法获取流
    | - 对流进行操作,可以使用Scanner扫描流和PrintWriter打印流
    | - close()关闭所有的资源操作
    网络通信的两种类型UDP,TCP
  • TCP的网络通信:(三次握手
    | -服务器创建ServerSocket对象,使用accept()方法等待用户连接。
    | - 客户端创建Socket对象,对服务器的端口进行访问,请求建立连接。
    | -服务器接受客户端的请求之后,与客户端建立连接,而后再等待新的客户端进行连接。
    | - 属于可靠连接。
  • UDP的网络通信:
    | -封装数据成包,将整个数据包发送往目的地,在目的地处才进行处理。
    | -接收别人发送的数据包,对其进行处理
    | -没有TCP的三次握手操作,属于不可靠的连接,但是开销小。

2. 为你的系统增加网络功能(购物车、图书馆管理、斗地主等)-分组完成

为了让你的系统可以被多个用户通过网络同时使用,需要为你的系统增加网络功能。

2.1 简述你想为你的系统增加什么网络功能?设计思路是什么?

  • 增加的功能:网络访问功能
  • 设计思路:通过构建一个Server类,能够实现多个用户同时进行访问操作,因此继承于Runnable接口,在run()方法中实现对图书馆文件进行读取操作和写入操作。

2.2 系统通过网络传递了什么信息?信息的格式是什么?

  • 通过网络传递了I/O输入流和输出流上的操作信息,先使用字节流InputStream,OutputStream对信息进行保存,而后再用Scanner扫描流,PrintWriter打印流进行读取和打印操作。

2.3 你的网络模块使用了TCP还是UDP技术?模块中的常用类是什么?

  • 使用的是TCP技术。
  • 模块中的常用类:
    | - ServerSocket
    | - Socket
    | - Thread类,Runnable接口,用于实现多用户访问的多线程技术。

2.4 截图网络通讯部分的源代码,并进行简单说明。

  • 部分源代码:
  • 用于启动多线程,即多用户访问模块
  • 服务器端启用的是8081端口,用户通过连接这个端口和服务器的ip可以访问。

  • LibraryRunnable类实现Runnable接口, 用于执行图书馆管理的操作,使用InputStream,OutputStream先获得连接用户的输入流和输出流,再根据用户的输入输出进行操作。
  • 运行结果:

3. 码云与PTA

3.1统计本周完成的代码量

需要将每周的代码统计情况融合到一张表中。

周次 总代码量 新增代码量 总文件数 新增文件数
1 120 120 2 2
2 280 160 5 3
3 590 310 10 5
4 780 190 12 2
5 1290 510 17 5
6 1710 420 20 3
7 2513 803 24 4
8 2513 0 24 0
9 3014 501 27 3
10 3441 327 30 3
11 4121 680 37 7
12 4667 546 42 5
13 5214 547 48 6
14 5834 620 50 2

选做:4. 网络学习指导(以下作业内容均为选做)

4.1. 网络基础

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

  • 返回结果中,回复消息的ip地址不同。
  • 原因:这两个域名对应的服务器地址不同,因此来自服务器的回复(ip地址)也不同。

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

  • 这条命令连接的是远程主机的23号端口。

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

  • 输入 telnet cec.jmu.edu.cn 80后,从屏幕看到的内容如下:

  • 可见,什么东西都没有,并不是cec.jmu.edu.cn的主页内容。

  • 使用GET /index HTTP/1.0的命令,会返回浏览器可识别的代码。

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

  • 启用了QQ管家,QQ等程序。
  • 使用端口:52604,10101,52896
  • QQ占用了54219端口,与远程ip183.232.84.67进行交互,这些IP分布地如下
  • 使用了TCP进行通信,也有的使用UDP进行通信。

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

  • 编写网络程序需要的信息如下:
    | - 服务器的端口号
    | - 服务器的IP地址
    | - 域名
    | - 使用的协议

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

4.2 编写TCP客户端程序

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

  • 以下就是编写的Client.java程序,以及运行结果。

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

4.2.3 将程序中的网址改成cec.jmu.edu.cn,端口号改为80进一步观察返回结果。没有任何返回结果,为什么?怎么修改代码才能正常显示?选做:为什么会返回乱码?如何解决?

4.2.4 启动网络调试助手,将其设置为TCP Server,并启动。尝试使用Client.java连接该TCP Server,使用该服务器向Client发送信息。(截图关键代码与运行结果)

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

  • Client用户端添加一个PrintStream来接收用户端的输出流,然后对流进行操作,以此将Client输入的信息发送给服务器。
  • 还需要一个Scanner的扫描流对象,通过new Scanner(System.in)读取键盘输入,然后将读取的输入赋给String类的对象,最后通过PrintStream的输出流对象输出。
  • 在用户端输出完之后,再通过if语句if(Client的输入流对象.hasNext())判断服务器端是否有回应,如果有的话就输出内容。

4.2.6 选做:实现2.5。截取关键代码并进行说明。

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

4.3 ServerSocket与TCP服务器

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

4.3.2 多线程MenuServer(截取关键代码证明你这个是多线程服务器,请使用多个telnet连接测试)。

  • 可以控制服务器的启动停止、查看客户端链接的基本信息(IP、端口、链接时间)
  • 拓展:在服务器端断开某个客户端的链接、查看客户端发送的给服务器端的日志记录
  • 参考:实验任务书-题目3
  • 参考: EchoServer.javaThreadedEchoServer.java (多线程服务器)
posted @ 2017-12-20 19:49  文不盲的苏些手丶  阅读(286)  评论(0编辑  收藏  举报