1. 本周学习总结

以你喜欢的方式(思维导图、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(); //关闭连接

2. 书面作业

1. 网络基础

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

答:

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

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

答:根据以上截图,通过网络连接监视器结果可以找到 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之后返回的是计算机工程学院的页面内容(页面代码)

操作步骤:

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

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

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

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

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

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进一步观察返回结果。没有任何返回结果,为什么?怎么操作

答:因为cec.jmu.edu.cn的80端口,实际上使用了http协议,该协议获取数据的语法是GET / HTTP/1.0。

代码中的\n是分割用的,这样的字串格式基本上是固定的,不然发送过去了以后,服务器断无法识别的。

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

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

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();

2.6 选做:实现2.5

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

3. ServerSocket与TCP服务器

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

  • 实现过程

    1.开始运行

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

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

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

  • 关键代码

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

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确实太陌生了。

有时候还会出现这种问题

参考: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界面中某个地方显示自己的学号,然后运行该程序(截图、出现学号)。简述这个程序的主要功能。

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

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

ClientChart:产生客户端的GUI界面;

ServerChart:产生服务端的GUI界面;

MainThread:创建在线用户列表,客户端一旦连接上端口,就通知客户已连接,并显示在线的用户;

ClientReadThread:获取线程,客户端的消息发送并显示与对话框中;

ServerReadThread:获取线程,服务端的端口开启提示;

ClientListener:客户端的活动监听,与客户端消息的发送与接收有关;

ServerActionListener:服务端的活动监听,与服务端消息的发送与接收有关;

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

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

选做:7. 网络爬虫

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

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

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

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

3. 码云

码云代码提交记录

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

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

201521123004 《Java程序设计》第13周学习总结的更多相关文章

  1. 201521123027 <java程序设计>第13周学习总结

    1.本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2.书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.e ...

  2. 2018面向对象程序设计(Java)第13周学习指导及要求

    2018面向对象程序设计(Java)第13周学习指导及要求 (2018.11.22-2018.11.25)  学习目标 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机 ...

  3. 面向对象程序设计(JAVA) 第13周学习指导及要求

    2019面向对象程序设计(Java)第13周学习指导及要求 (2019.11.19-2019.11.25)   学习目标 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作 ...

  4. 20145236 《Java程序设计》第九周学习总结

    20145236 <Java程序设计>第九周学习总结 教材学习内容总结 第十六章 整合数据库 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API ...

  5. 张旭升20162329 2006-2007-2 《Java程序设计》第一周学习总结

    20162329 2006-2007-2 <Java程序设计>第一周学习总结 教材学习内容总结 通过打书上的代码熟悉了Java编程的基本过程 教材学习中的问题和解决过程 1.因为我的虚拟机 ...

  6. 20175221 2018-2019-2 《Java程序设计》第一周学习总结

    20175221 2018-2019-2 <Java程序设计>第一周学习总结 教材学习内容总结 本周通过观看书本配套视频,学到了如解释器,编译器等一些简单概念. 还懂得了java的一些简单 ...

  7. 20175317 《Java程序设计》第九周学习总结

    20175317 <Java程序设计>第九周学习总结 学前准备 首先下载XAMPP,下载完成后打开: 将前两个选项打开 在IDEA中配置驱动mysql-connector-java-5.1 ...

  8. 学号 20175212 《Java程序设计》第九周学习总结

    学号 20175212 <Java程序设计>第九周学习总结 教材学习内容总结 一.MySQL数据库管理系统 1.在官网上下载并安装MySQL 2.在IDEA中输入测试代码Connectio ...

  9. 20175126《Java程序设计》第九周学习总结

    # 20175126 2016-2017-2 <Java程序设计>第九周学习总结 ## 教材学习内容总结 - 本周学习方式主要为手动敲代码并理解内容学习. - 学习内容为教材第十一章,本章 ...

  10. 20175234 2018-2019-2 《Java程序设计》第九周学习总结

    目录 20175234 2018-2019-2 <Java程序设计>第九周学习总结 教材学习内容总结 教材学习中的问题和解决过程 代码托管 感想 学习进度条 参考资料 20175234 2 ...

随机推荐

  1. 模拟exit()退出命令实现

    1.当输入exit命令是退出程序,如果输入其他的就打印====> 方法一while True: username=input("请输入你的用户名:>>>") ...

  2. 初学python类

    边看python官方2.7的文档,一边动手测试了一些例子加深自己的印象. 官方文档的网址:http://python.usyiyi.cn/python_278/tutorial/classes.htm ...

  3. 自定义组件-BreadcrumbTreeView 的使用

    一.问题概述 树形结构是开发中常用的一种组织数据的结构,不少平台也提供了对应的控件.而在android平台中,出于使用手指操作树形结构不是很方便的原因,并没有提供树形结构控件.但在实际应用中,不可避免 ...

  4. Python 数据模型

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 25.0px Helvetica } 一摞Python风格的纸牌 from collections impo ...

  5. Python初学——多进程Multiprocessing

    1.1 什么是 Multiprocessing 多线程在同一时间只能处理一个任务. 可把任务平均分配给每个核,而每个核具有自己的运算空间. 1.2 添加进程 Process 与线程类似,如下所示,但是 ...

  6. 九天学会Java,第三天,选择结构

    选择结构 变量和数据类型,赋值和输出 算术运算 选择结构 循环结构 函数定义,函数调用 变量作用域 栈,程序运行的基石 面向对象 异常处理 语言提供的公用包 上一节介绍了Java的算术运算,如加减乘除 ...

  7. 在Linux环境下搭建Tomcat+mysql+jdk环境

    按照下面的步骤一步一步来搭建tomcat+jdk+mysql环境.   [Linux环境]------我搭建的是64位centos版本的linux系统 1.下载并安装一个VMware workstat ...

  8. zoj3777 Problem Arrangement

    The 11th Zhejiang Provincial Collegiate Programming Contest is coming! As a problem setter, Edward i ...

  9. [知了堂学习笔记]_纯JS制作《飞机大战》游戏_第3讲(逻辑方法的实现)

    整体展示: 上一讲实现了诸多对象,这次我们就需要实现许多逻辑方法,如控制飞机移动,判断子弹击中敌机,敌机与英雄飞机相撞等等.并且我们在实现这些功能的时候需要计时器去调用这些方法.setInterval ...

  10. Spark Structured Streaming框架(2)之数据输入源详解

    Spark Structured Streaming目前的2.1.0版本只支持输入源:File.kafka和socket. 1. Socket Socket方式是最简单的数据输入源,如Quick ex ...