201521123022 《Java程序设计》 第十三周学习总结 1. 本周学习总结 2. 书面作业 3. 码云

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

2. 书面作业

Q1. 网络基础

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

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

前者IP所在地址:
201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

后者IP所在地址:
201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

由以上截图可知,距离越远,返回信息的耗时越长。

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

端口号为23。
201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

第一问:回车后清屏,不是cec.jmu.edu.cn的主页内容,如下:
201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

第二问:使用GET /index HTTP/1.0命令后,返回如下:
201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

如迅雷:
201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

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

Q2. 编写TCP客户端程序

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

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
可以看出大致相同。

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

因为此时状态是CLOSE-WAIT,即被关闭。要用get请求获取html文档。

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

尝试使用Client.java连接该TCP Server,使用该服务器向Client发送信息。(截图)
201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

Q3. ServerSocket与TCP服务器

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

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

Q4. UDP服务器

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

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

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

如简单的QQ聊天,就运用到输入流InputStream、输出流OutputStream、字符流PrintWriter。
Java网络编程中,流是至关重要的一部分,几乎所有的信息或文件传输都离不开流,数据的传输就依赖于流的作用。

Q6. 代码阅读

Q6.1 运行该程序(截图)。简述这个程序的主要功能。

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

实现了客户端和服务端之间的交流通信。

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

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
ClientChart:设置客户端界面
ClientReadThread:客户端读取线程
ClientListener:客户端监听器
ServerChart:设置服务端界面
SeverActionListener:服务端监听器
ServerReadThread:服务端读取线程
MainThread:总启动程序,实现服务端与客户端的交互。

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

存在多个客户端时,服务端并不能知道每一条信息是从哪个客户端发来的。可以设置客户端不同名。

3. 码云

201521123022 《Java程序设计》  第十三周学习总结
1. 本周学习总结
2. 书面作业
3. 码云