201521123091 《Java程序设计》第13周学习总结

Java 第十三周总结

第十三周的做业。
html

目录
1.本章学习总结
2.Java Q&A
3.码云上代码提交记录及PTA实验总结
4.课后阅读java


1.本章学习总结

1.1 以你喜欢的方式(思惟导图、OneNote或其余)概括总结网络相关内容。
下文来自与Java核心技术,有不少零散的知识点:正则表达式

  1. 链接到服务器:运行在远程计算机上的服务器软件不停地等待那些但愿与相应端口链接的网络请求。当远程计算机上的操做系统接收到一个请求与相应端口链接的网络数据包时,它便唤醒正在监听网络链接请求的服务器进程,并为二者创建链接。这种链接还一直保持下去,直到被其中任何一方停止。
  2. GET / HTTP/1.0能够返回一个HTML格式的文本页,与Web浏览器访问某个网页所经历的过程是彻底一致的,它是用HTTP从服务器请求Web页面。
  3. 套接字是网络软件中的一个抽象概念,负责使能该程序内部和外部之间的通讯。
  4. Java平台还支持所谓的UDP(用户数据报协议),该协议能够用于发送数据包,它所需付出的开销要比TCP少得多。UDP还有一个重要的缺点:数据包无需按照顺序进行传递,它们甚至可能在传输过程当中所有丢失。
  5. 因特网地址是指用一串数字表示的主机地址,它由4个字节组成,IPv6规定为16个字节。一些访问量较大的主机名一般会对应于多个因特网地址,以实现负载均衡。
  6. 服务器发送给服务器输出流的全部信息都会成为客户端程序的输入,同时来自客户端程序的全部输出都会被包含在服务器输入流中。
  7. URL(统一资源定位符),URI(统一资源标识符),URN(统一资源名称),URI是个纯粹的句法结构,用于指定标识Web资源的字符串的各个不一样部分。URL是URI的一个特例,它包含了用于定位Web资源的足够信息。其余URI则不属于定位符,由于根据该标识符咱们没法定位任何数据,也称之为URN。

2.Java Q&A

1. 网络基础

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

耗时不一样,由于210.34.128.152在福建厦门,上图183.232.231.173在广东广州,距离近,耗时短。数据库

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

23
编程

1.3 telnet cec.jmu.edu.cn 80,尝试回答:你从屏幕看到一些什么内容?返回的内容是否是cec.jmu.edu.cn的主页内容?尝试使用GET /index HTTP/1.0命令,会返回什么?


并非,啥都没有小程序


返回主页的网页源代码浏览器

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

QQ 使用8080端口 183.192.196.210来自上海市上海市 移动服务器

8080端口同80端口,是被用于WWW代理服务的,能够实现网页浏览,常常在访问某个网站或使用代理服务器的时候,会加上“:8080”端口号。网络

firefox 都是使用80端口
80端口是为HTTP开放的
223.202.6.26来自北京市朝阳区 BGP多线
这个BGP多线??
还有183.250.178.82来自福建省厦门市 移动
虾米音乐 113.18.220.108来自福建省福州市 移动多线程

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

IP、端口、域名、协议


2. 编写TCP客户端程序

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



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

大体类似,就是有些多是颜色控制符不能解析出来


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

由于没有发送get请求获取html文档


必定要再加个newline,由于咱们输入GET / HTTP/1.0后,要连续敲两次回车。


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

尝试使用Client.java链接该TCP Server,使用该服务器向Client发送信息。

2.1演示过了


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

启动两个线程,一个线程用来接受信息,一个线程用来发送信息


2.6 选作:实现2.5


忘记加服务器本身发的消息没有在服务器端显示,这个加一句输出就行了。


3. ServerSocket与TCP服务器

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


3.2 多线程MenuServer。



4. UDP服务器

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



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

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

socket的输入输出流是字节流,而后用字符流来包装。

Java网络编程与流之间的关系:

Java programs see network connections as streams of data that can be interpreted and responded to in any way necessary.

好比文件传输:
首先发送端从本地文件系统中读取文件,而且建立和接收端的网络链接,而后发送端提供数据包装器,而且把文件写入这个包装器中,而后写到网络中。接收端创建新文件,链接发送端,经过网络接收到数据并进行解包,将数据写到缓冲区中,最后从缓冲区写到本地新建的文件中去。这其中数据都是以字节流的形式来保存的。


6. 代码阅读

阅读ServerAndThread目录中的源代码

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


主要功能就是客户端与服务端之间的通讯

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

ClientChart:设置客户端界面
ClientReadThread:客户端读取线程
ClientListener:客户端的监听器

服务端同理可得

MainThread:启动服务端;监听到客户端链接后,加入客户端的列表中;启动服务端读取线程

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

  • 服务端发送的信息在客户端中没有和客户端本身发送的消息区分开来
    就本身发送的时候注明一下,分开来就行了
  • 服务端的输出没有另起一行
    那就加个换行符……
  • 还有就是本身会被再发一遍消息
    就是遇到同一客户端即跳过


7. 网络爬虫

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

改为3了,5跑的过久……





3.码云上代码提交记录

题目集:多线程(4-4到4-10)

3.1 码云代码提交记录

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


4. 课外阅读

4.1 Java Tutorial:Custom Networking

Networking Basics
在网上运行的电脑都是用TCP和UDP来进行互相通讯的。当咱们写网络程序的时候,都是在应用层上操做。通常来讲,咱们都不用关心TCP和UDP层。可使用java.net包。这些类提供独立于系统地网络通讯。
TCP:
当两个应用想可靠地和对方联系,他们会创建联系并在这个链接上收发数据。这就像是打电话。TCP保证从链接一端发送的数据均可以到达另外一端,而且都会按照发送的顺序接收到。不然,就会报错。
TCP为须要可靠联系的应用提供点对点的通道。HTTP,FTP和Telnet都是这样的例子。数据收发的顺序对于这些应用来讲是很重要的。当HTTP用来从URL上读取数据的时候,数据就必须按照发送的顺序接收。不然,就会收到混乱的HTML文件,崩溃的压缩文件或者是无效的信息。
UDP:
UDP的通讯是不能保证的。它从一个应用发送数据包,datagrams到另外一个应用。发送数据包就像是经过邮寄服务送信:顺序是不重要的,也不能保证。
有些通讯是不须要那么严格的标准的。事实上,可能由于可靠通讯所产生的额外费用致使服务无效。
好比对于时钟服务来讲,数据包丢了,再发一次是没有道理的,由于客户第二次收到的时候,时间已经不对了。若是客户发出两次请求,而且收到了无序的数据包,这并不重要,由于客户能够本身分辨出来而后再发一次请求。TCP在这种场合是毫无必要的,并且会致使时钟服务无效。另外一个例子就是ping命令,这边不作赘述。
总的来讲,一台主机只有一个物理链接。全部数据都经过这个链接到特定的电脑。然而,数据可能会出于不一样的目的在这台主机上运行。因此电脑要想知道是什么应用发送的数据,就用经过使用端口。
在网上传输的数据都会带上主机的地址信息还有目的端口。主机由32位的IP地址来指定,IP地址能够用来将数据准确的送到网上的某台主机上。端口就是一个16位的数字,TCP和UDP就能够送到正确的程序上。

URL:
URL是统一资源定位的缩写,是网上资源的引用。咱们能够向Web浏览器提供URL来定位网上的文件,就像是在信上提供地址,邮局才能知道往哪边寄。
Java的Internet程序会用到URL来寻找想要访问的网上资源。可使用java.net中的URL类来表示一个URL地址。

Socket:
URL和URLConnections提供相对高级的机制来访问网上的资源。有时程序须要使用低级的网络通讯。
例如,服务端提供一些服务,好比处理数据库的访问和发送最新的股价。客户使用服务端提供的服务,显示数据库的查询结果或者说向投资者提供股票购买推荐意见。两方的通讯必须是可靠的。数据不能丢失,并且必须按照服务端发送的顺序到达客户端。每一个程序都会绑定一个socket在链接的末端。为了通讯,客户端和服务端都要从socket中读取或者是写入。

Datagrams
一些应用是不须要TCP提供的可靠的、点对点的通道来通讯。这时候就可使用UDP来进行通讯。
UDP提供一种网络通讯的模式,应用是发送数据包的,就是datagram。datagram是独立的,是否到达,到达时间和内容都是无法保证的。Java提供了相应的类,即DatagramPacket和DatagramSocket。

4.2 HTTP协议简介

服务器把网页给浏览器,就是把网页的HTML代码给浏览器,而后 让它显示出来而已。浏览器和服务器之间的传输协议就是HTTP。

  • HTML是用来写网页的
  • HTTP是在网络上传输HTML的协议

GET / HTTP/1.1:
GET表示一个读取请求,将从服务器得到网页数据,1.1是HTTP协议的版本,大部分服务器也支持1.0版本。
浏览器依靠Content-Type来判断响应的内容所属的类型。
当浏览器读取到HTML源码后,它会解析HTML,显示页面,而后,根据HTML里面的各类连接,再发送HTTP请求给服务器,得到相应资源。

4.3 一个简单的小爬虫

FileReader类:
用来读连接文件(存放商品的连接),而后getLines()能够返回一个存放Url的列表。
Url类:
getConnection()用来得到连接,返回URLConnection类型
getReader()用来得到连接的输入流
isExist()用来判断是否含有相应字符串,在该程序中就是用来判断是否含有free_msg字符串,即金子商品,若是有,则返回真。具体实现即用BufferedReader按行读取。
Digger类:
这个类继承Thread类,每读入一个连接,就开启一个线程,查看是否有相应字符串,若是有的话,就用IE来打开连接
Runtime.getRuntime().exec("C:/Program Files/Internet Explorer/iexplore.exe " + url.getUrl());

相关文章
相关标签/搜索