201621123031 《Java程序设计》第13周学习总结
作业13-网络
1.本周学习总结
以你喜欢的方式(思维导图、OneNote或其他)归纳总结多网络相关内容。

2. 为你的系统增加网络功能(购物车、图书馆管理、斗地主等)-分组完成
为了让你的系统可以被多个用户通过网络同时使用,需要为你的系统增加网络功能。
2.1 简述你想为你的系统增加什么网络功能?设计思路是什么?
答:主要是添加了一个NetServer类,让代码能够被客户端使用远程连接来进行一系列操作。为了让系统能够同时被多个客户端访问,选择了使用TCP技术以及多线程技术。在NetServer类中创建了ServerSocket对象的套接字,然后又创建一个ThreadServer类来实现多线程技术,该类实现了Runnable接口,在run方法里写出了用户可进行的相应的操作。然后在主函数中创建线程,不断接收新的客户端,由此可实现多个用户对系统的同时操作。
2.2 系统通过网络传递了什么信息?信息的格式是什么?
答:系统通过网络将用户端或是服务端所进行的操作使用IO流传递给对方,信息使用字节流InputStream以及OutputStream存储,然后再通过字符流Scanner以及PrintWriter进行包装传输。
2.3 你的网络模块使用了TCP还是UDP技术?模块中的常用类是什么?
答:使用了TCP技术,模块中最常用的类为TCP网络通信方面的ServerSocket类以及Socket类,还有多线程方面的Runnable类和Thread类
2.4 截图网络通讯部分的源代码,并进行简单说明。
答:主要就是创建了一个NetServer类,并定义其端口为9700,然后在主函数中开启服务端进行客户端的接收,将接收到的客户端放到一个线程中分别进行处理。在ThreadServer类中实现run方法来设定用户所能进行的操作。








2.5 选做:使用自己编写的客户端访问系统。简述里面的核心代码。
创建套接字连接上图书馆系统的IP和端口号,然后设置两个线程,分别实现客户端与服务端之间的交流。




2.码云与PTA
3.1 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。

| 周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
|---|---|---|---|---|
| 2 | 607 | 607 | 15 | 15 |
| 3 | 1642 | 1035 | 33 | 18 |
| 5 | 2044 | 402 | 42 | 9 |
| 6 | 2874 | 830 | 57 | 15 |
| 7 | 3161 | 287 | 63 | 6 |
| 8 | 4299 | 1138 | 72 | 9 |
| 9 | 4831 | 532 | 81 | 9 |
| 10 | 5475 | 644 | 93 | 12 |
| 11 | 5958 | 483 | 102 | 9 |
| 12 | 6819 | 861 | 116 | 14 |
| 13 | 7408 | 589 | 127 | 11 |
| 14 | 8348 | 940 | 141 | 14 |
选做:4. 网络学习指导(以下作业内容均为选做)
1. 网络基础
1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同?


- IP地址不同:因为两者服务器所处地区不一样,所以IP也不一样。
117.185.17.151来自上海市,而112.5.163.149来自福建省厦门市。 - 往返时间不同:厦门市的服务器离我们更近一些,因此往返时间较快。
1.2 telnet bbs.newsmth.net,上面这条命令连接的是远程主机的什么端口号?
答:远程登录服务使用的默认端口为23,这个一般常识,当然,也可以用netstat命令进行查询。
1.3 telnet cec.jmu.edu.cn 80,尝试回答:你从屏幕看到一些什么内容?返回的内容是不是cec.jmu.edu.cn的主页内容?尝试使用GET /index HTTP/1.0命令,会返回什么?详见实验任务书题目1。
答:看到……一片黑暗,什么内容都没有。当使用了GET /index HTTP/1.0命令,会返回学校主页的源码。这是因为学校的网页服从的是HTTP协议,因此要使用GET /index HTTP/1.0发送请求来获得网页内容。


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

- 360浏览器使用了443端口
- 有道词典使用了80端口
- QQ使用了80端口,8080端口,443端口和那些远程IP进行交互,这些IP分布在广东省深圳市,使用了TCP协议和UDP协议进行交互
1.5 编写网络程序必不可少的几个信息是什么?
- 网络协议(IP协议,TCP和UDP协议)
- 端口和套接字(Socket、ServerSocket)
- IP以及域名等基础知识
- 输入输出流
2. 编写TCP客户端程序
2.1 参照SocketTest.java编写一个简单的连接远程服务器小程序Client.java,可以接收并显示服务器发送的信息。启动时需要首先在控制台指定远程主机IP与端口号。(截图,出现自己学号)。
答:其实没怎么改源代码,只是加了一个控制台输入,然后查询了百度的IP地址进行接收该页面的信息。



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


答:可以看出,除了一些编码上问题导致一些字符无法正常显示,两者返回的结果几乎一样。
2.3 将程序中的网址改成cec.jmu.edu.cn,端口号改为80进一步观察返回结果。没有任何返回结果,为什么?怎么修改代码才能正常显示?选做:为什么会返回乱码?如何解决?
答:没有返回结果是因为没有使用GET / HTTP/1.0\n命令发送一个请求,因此不会有返回结果,加上如下代码即可。


会出现乱码主要是因为eclipse上的默认字符集是GBK,而网页上的字符集不是,我先查看了网页的源代码,由下图可以看出,网站的字符集为UTF-8,然后只要把eclipse上的字符集修改为UTF-8即可。最后再运行时即可正常显示



2.4 启动网络调试助手,将其设置为TCP Server,并启动,如下图所示(作业中不要出现下图)
尝试使用Client.java连接该TCP Server,使用该服务器向Client发送信息。(截图关键代码与运行结果)



2.5 回答:现在的Client.java只能接收信息,能否改造Client.java使其可以与服务器进行交互(服务器可以发送信息给Client,Client也可发送信息给服务器),写出大概思路,不要运行截图。
答:一般要实现客户端与服务器的交互,要用到线程的知识,可以在代码中创建两个线程,分别实现他们的run方法,一个线程用于客户机向服务端发送数据,另一个线程用于服务器像客户机发送数据。
2.6 选做:实现2.5。截取关键代码并进行说明。




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





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



4. UDP服务器
4.1 改造3.1或3.2,将其改造成基于UDP的MenuServer。(区别题目3的TCP服务器的关键代码,需截大图、包含学号,不要截图运行界面)。可以使用网络调试助手模拟UDP客户端,将其设置为UDP,要填本机IP与端口也要填远程服务器的IP与端口。


4.2 对比相应的基于TCP的MenuServer,主要有何不同?为了连接多个客户端,一定要通过多线程技术吗?如果不使用,怎么区分不同的客户端呢?
答:UDP是一种无连接的数据交换方式,发送数据之前不需要建立连接,而TCP要建立完连接才能进行数据的传送。为了连接多个客户端,需要使用多线程技术,不然因为UDP没有在发送方和接收方之间创建连接,所以无法区分不同的客户端。
5. 论述题:网络程序与流
5.1 前面编写的程序用到了大量的流的相关知识。简述,编写网络程序时应当选择什么样的流?Java网络编程、流之间的关系。任选一场景描述,场景如:简单的文字聊天、文件传输、应用层协议服务器,如QQ、聊天室、网络游戏。
答:对于网络聊天室,我们可以使用BufferedReader和BufferedWriter字符流来进行数据的接收和发送操作来实现用户和用户之间的通信。在Java的网络编程中,我们先要使用套接字来创建一个对象,然后我们要进行网络之间的通信,这时候就要用到Java中的各种IO流,因此,JAVA的IO流是网络编程中进行数据传输的主要途径。
6. 代码阅读
阅读ServerAndThread目录中的源代码
6.1 修改程序,在GUI界面中某个地方显示自己的学号,然后运行该程序(截图、出现学号)。简述这个程序的主要功能。

答:这个程序的功能是用于连接客户端和服务端,让它们可以进行通信,类似一个简易的聊天系统。学号直接加在标题栏了,简单粗暴……
6.2 画出源代码的结构图(各个类的依赖关系)。并简要说明各个类的功能。

ServerChart:服务端的界面框架ServerReadThread:与客户端进行通信,并将接收的消息显示出来ServerActionListener:服务端动作监听器,为服务端界面的按钮添加监听事件ClientChart:客户端的界面框架ClientReaderThread:与服务端进行通信,并将接收的消息显示出来ClientListener:客户端动作监听器,为客户端界面的按钮添加监听事件MainThread:让客户端与服务端建立连接,将线程放入列表让服务端去读取
6.3 简述这个程序有什么不足之处及改进方法.
1.客户端界面接收到的消息无法区分是谁发送的。
改进方法:在客户端和服务端发送消息时就标记上是谁发送的。
2.服务端接收的消息没有换行。
改进方法:在服务端显示在自己的消息上加一个换行符。
3.无论先关闭哪一端,都会让另一端因为还在不停请求输入流而不断输出报错信息。
改进方法:当另一端关闭时,在处理异常时直接使用break退出请求。

201621123031 《Java程序设计》第13周学习总结的更多相关文章
- 201521123027 <java程序设计>第13周学习总结
1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2.书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.e ...
- 2018面向对象程序设计(Java)第13周学习指导及要求
2018面向对象程序设计(Java)第13周学习指导及要求 (2018.11.22-2018.11.25) 学习目标 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机 ...
- 面向对象程序设计(JAVA) 第13周学习指导及要求
2019面向对象程序设计(Java)第13周学习指导及要求 (2019.11.19-2019.11.25) 学习目标 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作 ...
- 20145236 《Java程序设计》第九周学习总结
20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...
- 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结
20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...
- 20175221 2018-2019-2 《Java程序设计》第一周学习总结
20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...
- 20175317 《Java程序设计》第九周学习总结
20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...
- 学号 20175212 《Java程序设计》第九周学习总结
学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...
- 20175126《Java程序设计》第九周学习总结
# 20175126 2016-2017-2 <Java程序设计>第九周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第十一章,本章 ...
- 20175234 2018-2019-2 《Java程序设计》第九周学习总结
目录 20175234 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码托管 感想 学习进度条 参考资料 20175234 2 ...
随机推荐
- [前端]如何写一个水平导航栏?(浮动、inline-block+消除间距)
在看W3school时,看到一个很好的例子,如何制作一个水平的导航栏?没有任何要求,只需要达到下面的效果: 我认为这个例子包含了很多css布局需要了解的知识,因此单独写一下. W3school上面的方 ...
- mini-css-extract-plugin 的用法(webpack4)
今天在使用webpack的extract-text-webpack-plugin插件提取单独打包css文件时,报错,说是这个插件要依赖webpack3的版本. 后面查了一下,webpack4得使用mi ...
- 【BZOJ1207】【HNOI2004】打鼹鼠(动态规划)
[BZOJ1207][HNOI2004]打鼹鼠 题面 BZOJ题面 题解 考虑到m的范围只有10000 O(m^2)的复杂度是可以接受的 所以直接暴力DP 每次枚举前面出现的鼹鼠 检查是否能够转移过来 ...
- 论文笔记(6):Weakly-and Semi-Supervised Learning of a Deep Convolutional Network for Semantic Image Segmentation
这篇文章的主要贡献点在于: 1.实验证明仅仅利用图像整体的弱标签很难训练出很好的分割模型: 2.可以利用bounding box来进行训练,并且得到了较好的结果,这样可以代替用pixel-level训 ...
- MySQL的sum()函数
如下图,这是一个关于用户参加活动,每个活动会给这位用户评分的一个表: 用户1参加了A活动,评分100: 用户2参加了B活动,评分98,又参加了D活动,评分10: 用户3参加了C活动,评分99 需求:把 ...
- 从IE浏览器获取当前页面的内容
从IE浏览器获取当前页面内容可能有多种方式,今天我所介绍的是其中一种方法.基本原理:当鼠标点击当前IE页面时,获取鼠标的坐标位置,根据鼠标位置获取当前页面的句柄,然后根据句柄,调用win32的东西进而 ...
- wpf研究之道-ProgressBar(进度条)控件
ProgressBar控件,非常有用.它在什么情况下有用呢?如何使用?带着这两个问题,我们探讨下. 如果程序需要很长时间来运行,用户在不知道的情况下,以为程序已经"卡死"了,没有响 ...
- Java 对IP请求进行限流.
高并发系统下, 有三把利器 缓存 降级 限流. 缓存: 将常用数据缓存起来, 减少数据库或者磁盘IO 降级: 保护核心系统, 降低非核心业务请求响应 限流: 在某一个时间窗口内对请求进行限速, 保护系 ...
- Postman使用小技巧
Postman使用小技巧 2017-09-13 目录: 1 自动生成流水号2 保存响应结果 1 自动生成流水号 返回 为了让接口具有幂等性,在设计时,往往有一个字段是唯一的(比如流水号,交易编号等), ...
- SQL Server The target database ('db') is in an availability group and currently does not allow read only connections. For more information about application intent, see SQL Server Books Online.
一.问题概述 在错误日志中看到非常多的alwayson群集只读连接错误,错误信息的描述为“目标数据库位于可用性组,当前不允许通过read only连接”.错误日志如下: 当前的业务系统使用监听ip对数 ...