201521123005《Java程序设计》第十三周学习总结

时间:2023-03-09 21:55:54
201521123005《Java程序设计》第十三周学习总结

1. 本周学习总结##

1.网络基本概念

201521123005《Java程序设计》第十三周学习总结

2.网络常用命令

ipconfig 查看网络配置信息,如ip地址

ping 测试网络是否连通

telnet 远程登录

ftp 登陆ftp

Fport (xp下)查看计算机端口使用情况

3.连接到服务器

套接字(Socket)

Socket s = new Socket("cec.jmu.edu.cn",80)

s.getInputStream(); //通过套接字获得输入流

s.close(); //关闭连接

2. 书面作业##

Q1. 网络基础Q

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

201521123005《Java程序设计》第十三周学习总结

201521123005《Java程序设计》第十三周学习总结

返回的IP地址和往返程的估计时间不同,ping cec.jmu.edu.cn比ping www.baidu.com包的传输时间更短。
原因:不同的域名有不同的IP地址,www.a.shifen.com<-->14.215.177.38 ,jmuweb2.jmu.edu.cn <--> 210.34.128.152。因为14.215.177.38 所在地址在广东省广州市 电信,210.34.128.152所在地址在福建省厦门市 集美大学 教育网 所以cec.jmu.edu.cn的服务器离我们更近,ping cec.jmu.edu.cn比ping www.baidu.com包的传输时间更短。

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

201521123005《Java程序设计》第十三周学习总结

上面这条命令连接的是远程主机的端口号是:23

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

201521123005《Java程序设计》第十三周学习总结

屏幕没有任何返回结果,返回的内容是`cec.jmu.edu.cn`的主页内容。因为`cec.jmu.edu.cn`的协议是HTTP,需要有HTTP命令才有响应。使用telnet连接到HTTP服务器,要从cec.jmu.edu上请求index.html页面,首先要连接到服务器的80端口。

201521123005《Java程序设计》第十三周学习总结

之前的已经连接上了服务器,发送http请求消息。使用GET /index HTTP/1.0命令意思是通过1.1版本协议请求index.html页面。服务器返回后就断开连接。

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

201521123005《Java程序设计》第十三周学习总结

telent,qq,360浏览器等程序在运行。有443(HTTPS超文本传输安全协议),80(HTTP超文本传送协议),23(Telnet(远程登录)服务),1400(TCP传输控制协议)端口。。QQ占用了80端口和1400端口,IP:183.3.235.188在广东省深圳市 电信,IP:110.81.153.141在福建省泉州市 电信,IP:59.37.96.67在广东省深圳市 电信,IP:210.34.129.218在福建省厦门市 集美大学 教育网。使用TCP协议进行通信。

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

IP地址和端口,域名,使用TCP还是UDP协议。

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

Q2. TCP客户端程序编写

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

201521123005《Java程序设计》第十三周学习总结

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

201521123005《Java程序设计》第十三周学习总结

201521123005《Java程序设计》第十三周学习总结

显示内容是差不多的,只是因为有些东西如颜色、中文无法在运行结果上正常显示。

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

201521123005《Java程序设计》第十三周学习总结

因为状态是CLOSE-WAIT即被关闭。在对方关闭连接之后服务器程序自己没有进一步发出FIN信号,一般原因都是TCP连接没有调用关闭方法。换句话说,就是在对方连接关闭之后,程序里没有检测到,或者程序压根就忘记了这个时候需要关闭连接,于是这个资源就一直被程序占着。应该发送get请求获取html文档,才有结果。

201521123005《Java程序设计》第十三周学习总结

运行结果:

201521123005《Java程序设计》第十三周学习总结

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

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

201521123005《Java程序设计》第十三周学习总结

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

201521123005《Java程序设计》第十三周学习总结

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

Q3. ServerSocket与TCP服务器

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

201521123005《Java程序设计》第十三周学习总结

201521123005《Java程序设计》第十三周学习总结

201521123005《Java程序设计》第十三周学习总结

运行结果:

201521123005《Java程序设计》第十三周学习总结

输入4,左上网络设置仍为断开,仅仅退出菜单

201521123005《Java程序设计》第十三周学习总结

输入BYE,服务器断开,左上网络设置由断开变为连接

201521123005《Java程序设计》第十三周学习总结

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

201521123005《Java程序设计》第十三周学习总结

201521123005《Java程序设计》第十三周学习总结

输入telnet 127.0.0.1 8189

201521123005《Java程序设计》第十三周学习总结

输入telnet localhost 8189

201521123005《Java程序设计》第十三周学习总结

Eclipse控制台 Spawning 1表示第一个线程,Eclipse控制台 Spawning 2表示第二个线程

201521123005《Java程序设计》第十三周学习总结

3.3 选做:图形界面的MenuServer

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

参考:EchoServer.java,ThreadedEchoServer.java (多线程服务器)

Q4. UDP服务器

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

运行界面:

201521123005《Java程序设计》第十三周学习总结

201521123005《Java程序设计》第十三周学习总结

201521123005《Java程序设计》第十三周学习总结

参考:UDPServer.java

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

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

Q6. 代码阅读

阅读ServerAndThread目录中的源代码

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

201521123005《Java程序设计》第十三周学习总结

主要功能:客户端和服务端的信息可以互相传递,客户端与客户端也可以进行信息传递。

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

201521123005《Java程序设计》第十三周学习总结

功能
ClientChart 设置客户端界面
ClientReadThread 客户端读取线程
ClientListener 客户端的监听器
ServerChart 设置服务端界面
ServerReadThread 服务端读取线程
SeverActionListener 服务端的监听器

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

201521123005《Java程序设计》第十三周学习总结

如截图所示客户端的对话无法看出是谁发出,虽然从服务端可以得知是那个客户发了消息,单从客户端对话来看,会照成混乱。
改进:在客户端对话框里消息前面加上是哪个客户端发的。

201521123005《Java程序设计》第十三周学习总结

3. 码云##

在码云的项目中,依次选择“统计-Commits历史-设置时间段”, 然后搜索并截图

201521123005《Java程序设计》第十三周学习总结

4.课外阅读##

4.1 Java Tutorial:Custom Networking

Trail: Custom Networking

主要看Overview of Networking,Working With URLs,All About Sockets,All About Datagrams

4.2 HTTP协议简介

4.3 其他阅读资料

Java编程技巧:小爬虫程序.docx

4.4 进阶:HTTPComponent的使用

使用java中的Socket、URL、URLConnection,然后遵循HTTP协议也可以编写一个小程序,和可以查询成绩的HTTP服务器进行交流。然而直接使用Socket编程较麻烦,这时候我们可以使用HTTPComponent。

HTTPComponent相比传统JDK自带的URLConnection,增加了易用性和灵活性

1: 阅读HttpClient 教程,使用HTTPComponent编写一些与HTTP服务器交换的示例程序

2: 使用HTTPComponent开发一个查询成绩的程序:用户输入用户名、密码、验证码,即可自动查询教务处服务器,获取成绩。

参考资料:用Java的HttpClient写一个简单的http请求和返回,HttpClient使用详解,HttpClient 教程, HTTP Client官网