201521123004 《Java程序设计》第13周学习总结 1. 本周学习总结 2. 书面作业 3. 码云 4.课外阅读

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

  • 协议、IP、域名、端口号
    • 协议:网络中为了进行数据交换(通信)而建立的规则、标准或约定(=语义+语法+规则)
    • 常用应用层协议:http, ftp,telnet
    • IP层协议(Internet Protocol):在Internet上的计算机通过IP地址进行标识网络上两台计算机进行通信,使用IP地址互相找到对方
    • 示例: 210.34.148.132
    • 域名:Internet上某一台计算机的名称
    • 示例:cec.jmu.edu.cn
    • IP与域名有一种对应关系
    • 示例:cec.jmu.edu.cn <------> 210.34.129.8
    • 常见的主机名和IP地址
      • localhost 本地主机
      • 127.0.0.1 本地主机的回环地址,
      • ping localhost和ping 127.0.0.1效果一样
    • 端口号:一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口。如果把IP地址比作一间房子 ,端口就是出入这间房子的门。真正的房子只有1个门,但是一个IP地址的端口 可以有65536个之多!端口是通过端口号来标记的
    • 主机是区分不同的网络服务(比如Web服务、FTP服务、SMTP服务等),显然不能只靠IP地址,因为IP 地址与网络服务的关系是一对多的关系。实际上是通过“IP地址+端口号”来区分不同的服务的
    • 默认端口号:FTP服务器的TCP端口号都是21,Telnet服务器的TCP端口号都是23, HTTP服务器的端口号是80
  • 网络常用命令
    • ipconfig 查看自己的网络配置信息,如ip地址
    • ping 测试网络是否连通
    • telnet 远程登录
    • ftp 登陆ftp
    • fport(xp下)查看自己的计算机上端口使用情况
  • 套接字(socket)通讯
    • socket通常用来实现客户端和服务器端的连接。
//相关代码
Socket  s= new Socket("cec.jmu.edu.cn",80);//("远程主机地址 ",端口号)
s.getInputStream();   //通过套接字获得输入流-->对流操作
s.close();  //关闭连接

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

2. 书面作业

1. 网络基础

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

答:

  • 首先,www.baidu.com与cec.jmu.edu.cn的IP地址不一样,至于原因,IP地址与域名之间有对应关系,不同的网站的IP地址肯定会不一样
  • 其次,往返行程的估计时间也不一样,很明显,cec.jmu.edu.cn的时间比较快,原因与距离有关,本地所需时间会比外地的来的快

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

答:根据以上截图,通过网络连接监视器结果可以找到 telnet bbs.newsmth.net的远程主机的端口号是:23

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

答:屏幕上什么内容都没有,只有一个光标在跳动,显然返回的内容不是cec.jmu.edu.cn的主页内容;
使用GET /HTTP/1.0之后返回的是计算机工程学院的页面内容(页面代码)

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

操作步骤:

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

答:本机上联网程序,使用了443端口(https)和80端口(http)以及58398,58397和5222端口,QQ占用了80端口和那些远程IP进行交互,这些IP分布地在中国广东省深圳市电信,使用了TCP协议和UDP协议进行通信,截图如下:

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

答:协议、IP、域名、端口号(详细内容在学习总结)

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

2. 编写TCP客户端程序

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

答:因为cec.jmu.edu.cn的80端口,实际上使用了http协议,该协议获取数据的语法是GET / HTTP/1.0。
代码中的 是分割用的,这样的字串格式基本上是固定的,不然发送过去了以后,服务器断无法识别的。

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

答:使用PrintWriter将控制区内的字符串格式化输出到网络调试助手的文本框中

PrintWriter out = new PrintWriter(s.getOutputStream());
    Scanner sc = new Scanner(System.in);
    String line1 = sc.nextLine();
    out.println(line1);
    out.flush();

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

2.6 选做:实现2.5

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

3. ServerSocket与TCP服务器

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

  • 实现过程
    1.开始运行

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

2.输入menu,进入菜单选项

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

3.输入1,2,3,4进行操作

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

4.输入quit断开(网络调试助手断开连接)

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

  • 关键代码

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

3.3 选做:图形界面的MenuServer

参考:实验任务书-题目3
参考:EchoServer.java,ThreadedEchoServer.java (多线程服务器)

4. UDP服务器

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

答:参考UDPServer.java对MenuServer.java稍作修改,尝试了好多次,运行后不报错,用网络调试助手也能连接上,但是却不能显示正确的内容,对UDP确实太陌生了。

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

有时候还会出现这种问题

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

参考:UDPServer.java
参考:Writing a Datagram Client and Server

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

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

答:

  • 编写网络程序选用的一般是InputStream,OutputStream,有时还会用的PrintWriter,在ServerAndThread目录中的源代码中,还发现使用了对象流----ObjectInputStream和ObjectOutputStream

对象流是过滤流,需要节点流作参数来构造对象。用于直接把对象写入文件和从文件读取对象。
--对象流, 网络编程 记要

  • 流是Java网络编程必不可少的一部分,几乎所有的信息或文件传输都离不开流,客户端想要获取服务端的信息必须通过流来进行读取和写入,同理,服务端想要获取客户端信息也是离不开流。

6. 代码阅读----阅读ServerAndThread目录中的源代码

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

程序的主要功能:产生两个GUI界面(服务端和客户端),点击按钮启动服务端的8099端口,点击按钮将客户端与8099端口进行连接,我猜老师的意思一个是要让两个框之间能进行信息的传递和交流,但是很遗憾,现在只能实现客户端的信息输入,没办法传到服务端,而服务端的信息输入也有问题。

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

ClientChart:产生客户端的GUI界面;
ServerChart:产生服务端的GUI界面;
MainThread:创建在线用户列表,客户端一旦连接上端口,就通知客户已连接,并显示在线的用户;
ClientReadThread:获取线程,客户端的消息发送并显示与对话框中;
ServerReadThread:获取线程,服务端的端口开启提示;
ClientListener:客户端的活动监听,与客户端消息的发送与接收有关;
ServerActionListener:服务端的活动监听,与服务端消息的发送与接收有关;

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

答:在服务端和客户端消息的发送与接收方面还存在缺陷,服务端不能分辨是哪个客户端发来的消息

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

选做:7. 网络爬虫

使用Socket、URL、正则表达式、流等编写一个网络爬虫可以将cec.jmu.edu.cn及其所包含链接上的所有网址的图片都下载下来,抓取深到不超过5。

选做:8. 简易搜索引擎(进阶)

8.1 写出设计思路即可。该搜索引擎包含几部分?里面核心的实现思路?如果能用框架图、流程图画出架构

8.2 以计算机学院网站为例,进行测试。比如,输入ACM后搜索,可以将包含ACM的的网页抽取出来。(可作为课程设计题目)

3. 码云

码云代码提交记录

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

201521123004 《Java程序设计》第13周学习总结
1. 本周学习总结
2. 书面作业
3. 码云
4.课外阅读

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,增加了易用性和灵活性