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

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

2. 书面作业

1. 网络基础

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

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

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

分析结果:从上图对比可知,传输相同大小(32字节)、相同数量(4个)的数据,丢包率两者均为0%,但是ping cec.jmu.edu.cn比ping www.baidu.com包的平均传输时间更短。
原因:Ping命令主要用于测试本地主机与远程主机之间的连通性,而传输时间的长短受传输介质、网速、对方服务器等因素影响。

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

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

从上图知,bbs.newsmth.net的ip地址为101.200.29.164,远程端口号为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分布地在那里?使用了什么协议进行通信?

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

QQ等程序
14311,4300,4301

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

(1)ip地址和域名;
(2)端口;
(3)协议;
(4)数据传输方式。

2. 编写TCP客户端程序

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

//201521123117
public class Client {
 public static void main(String[] args){
 try{
     Socket s=new Socket("ip",端口号);
     try{
         InputStream inStream =s.getInputStream();
         Scanner in =new Scanner(inStream);
         
         while(in.hasNextLine()){
             String line = in.nextLine();
             System.out.println(line);
             }
         }
     finally
     {
         s.close();
         }
     }catch (IOException e)
 {
         e.printStackTrace();
         }
 }
 }

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

(1)"bbs.newsmth.net" 23
201521123117 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
(2)telnet bbs.newsmth.net 23
201521123117 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

(1)返回"bbs.newsmth.net"的23端口的界面,只是显示初始界面,无法输入代号实现其功能,颜色控制符无法解析;
(2)telnet bbs.newsmth.net连接到"bbs.newsmth.net"的23端口,进入界面,可以输入对应字符串实现功能。

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

在cmd中输入telnet cec.jmu.edu.cn命令,没有返回任何结果,而这个程序返回的是网址的初始界面,故程序没有任何返回结果。

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

尝试使用Client.java连接该TCP Server,使用该服务器向Client发送信息。(截图)
网络调试助手输入:
201521123117 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
输出结果:
201521123117 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

思路:使用Scanner(System.in)在控制台进行输入,PrintWriter(s.getOutputStream())获得Socket对象的输出流,并从控制台输出信息,最后要flush(),防止数据丢失。

3. ServerSocket与TCP服务器

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

关键代码:

menu:

out.println("***********************");
out.println( "1.显示服务器当前时间  " );
out.println( "2.您的IP " );
out.println( "3.文件搜索" );
out.println( "4.退出菜单" );
out.println("***********************");

选择:

              switch(x){
               case 1:{//获取当前时间
                Date date=new Date();
                DateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                String time=format.format(date);
                out.println("当前时间:"+time);
                out.println();
                break;
               }
              case 2:{//获取IP
                out.println("您的IP:"+this.incoming.getInetAddress().toString());
                out.println();
                break;
               }
              case 3:{//文件搜索
                out.println("无文件");
                out.println();
                break;
                }
               case 4:{//退出菜单
                flag=false;
                out.println("退出成功");
                out.println();
                out.println( "输入menu,选择菜单" );
                out.println( "输入quit,退出服务器" );
                out.flush();
                break;
               }
             }

运行结果截图:
201521123117 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云

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

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

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

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

4. UDP服务器

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

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

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

编写网络程序时应当选择InputStream和OutputStream。
关系:客户端的输入流连接到服务器,服务器和Socket对象之间通过InputStream,读取客户端发出的信息;Socket对象通过OutputStream与服务器连接,将信息发送出去,服务器的输出流与客户端连接,实现了客户端读取Socket对象发出的信息。从而实现了双向通信。

6. 代码阅读

阅读ServerAndThread目录中的源代码

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

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

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

3. 码云