1. 本周学习总结

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

介绍的传输层协议 :

  • TCP

    可靠:具有失败重传功能

    开销较大:需要建立链路 需要维持传输中的关系

    控制能力较强:具有例如窗口技术这样控制流量的技术 可以有效地防止整个网络瘫痪
  • UDP

    开销小:UDP报字段比TCP的更小 开销也更小

    不可靠:UDP尽力帮你传输数据,能不能到达目的地就看天意了(x

相应的介绍了java中的套接字 :

socket 类似于应用层与运输层之间的接口

  • ServerSocket与Socket

    将java中的使用TCP协议的socket封装成流的形式

    用户只需要将该socket看做一个延迟较高的流来操作就行 隐藏了具体的网络细节
  • DatagramSocket

    将java中的使用UDP协议的socket封装成流的形式

    2. 书面作业

  1. 网络基础

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

回复的ip地址不同,数据包往返时间也不同

因为这两个域名并不指向同一个ip

可以看到学校的网站比百度搜索页所耗费的时间更短,因为地理上学校网站主机应该会离本机更近,经过的网络环境也更简单

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

23 telnet命令默认端口号23

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

看到网页源代码

渲染后就是我们日常看到的网页

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

大部分都是使用了1024以上的端口

QQ占用了几个1024以上的端口,例如与qq好友对话那目标IP地址就是好友的因特网地址

QQ有的服务使用了TCP,有的服务使用了UDP,像语音通话这样允许一定程度的丢包并且对延迟比较不能容忍的的使用的就是虽然不可靠但是快的UDP协议

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

  • 通信的各方的ip地址
  • 连接的通信方式(主要是应用层协议
  • 该程序的定位(是作为客户端还是服务器等

2. 编写TCP客户端程序

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

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

IDE内部的控制台显示的不是彩色的界面

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

要先服务器发出GET请求才会有返回结果

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

同2.1

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

使用多线程再建立一个专门用于读取用户控制台输入并将其发往套接字的线程

2.6 选做:实现2.5

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

3. ServerSocket与TCP服务器

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

见3.2多线程服务器

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

main函数负责处理接入的socket,对于每个接入建立一个线程来处理该socket的交互,每个处理线程又有对应的一个接受控制台输入的线程用于服务器与客户端们交互

4. UDP服务器

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

除了一些方法不一样以外其它操作基本相同

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

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

要根据我们要写的程序本身的定位来决定要使用什么样的流

具体看程序的几个特性 :

  • 是否允许少量的丢失数据

    比如邮件传输就不允许丢失数据

    而语音通话之类的可以允许少量的丢失,实际上如果在语音通话中对丢失的包进行重发饭反而会导致通话混乱的情况(突然听见对方在10秒前说的话)
  • 是否对时间很敏感

    例如网游之类的程序,尤其是FPS游戏,对即时性比较看重,传输较慢开销较大的协议就不太适合

等等

6. 代码阅读

阅读ServerAndThread目录中的源代码

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

用简单UI的做一个多线程的服务器-客户端模式的程序,服务器可以在客户端之间传递数据

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

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

UI比较粗糙

还不支持ip地址的动态使用,源代码中只是用了环回地址,也就是说只能本地使用

201521123077 《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. Android -- AsyncTask源码解析

    1,前段时间换工作的时候,关于AsyncTask源码这个点基本上大一点的公司都会问,所以今天就和大家一起来总结总结.本来早就想写这篇文章的,当时写<Android -- 从源码解析Handle+ ...

  2. Java入门——(5)Java API

      关键词:String类.StringBuffer类.System类.Math类.Random类.Date类.Calendar类.DateFormat类   API (Application Pro ...

  3. Oracle Basic Ready Notes

    1. Select the standard database block size. This is specified at database creation by the DB_BLOCK_S ...

  4. 深入理解Java 虚拟机阅读笔记(一)

    1.程序计数器- 占用空间:较小 作用:字节码行号指示器 作用详情:指示指令执行,如(字节码的执行,分支,循环,跳转,异常处理,线程恢复) 特点:线程私有(每个计数器独立计算,上下文相互独立). 2. ...

  5. MVC5+EF6 完整教程17--升级到EFCore2.0

    EF Core 2.0上周已经发布了,我们也升级到core 文章内容基于vs2017,请大家先安装好vs2017(15.3). 本篇文章主要讲下差异点,跟之前一样的就不再重复了. 文章目录(差异点): ...

  6. 创建Windows服务(C++)

    这次我们来创建一个windows本地服务,需要有以下功能: 安装服务. 卸载服务. 手动启动服务. 开机自动启动服务. 控制服务(停止.暂停.恢复.启动). 服务概念及介绍 看下图,一切尽在不言中了( ...

  7. 用Html模仿百度一下你就知道

    用Html模仿百度一下你就知道.... ------------------------------- <!doctype html> <html lang="en&quo ...

  8. 关于php中的include html文件的问题,为什么html可以在php中执行

    之前在w3shXXl看的教程,上面对include的解释是把指定的文件复制到这条指令执行的地方. 这真是坑到我了..... 在了解mvc的时候,控制器显示视图时需要用include包含html视图文件 ...

  9. Tomcat知识1

  10. Keep in Mind

    Do not undermine your worth by comparing yourself with others.It is because we are different and eac ...