201621123001 《Java程序设计》第13周学习总结
1. 本周学习总结
以你喜欢的方式(思维导图、OneNote或其他)归纳总结多网络相关内容。
- 通过IP地址和端口号可以进行建立Socket对象,然后进行通信
- 使用Socket的一般步骤:
- 建立Socket对象(与远程主机进行了连接)
- 从Socket对象上获取流
- 对流进行操作就相当于进行网络通信
- Socket对象是资源,用完记得关闭
- 服务器端首先要监听一个端口,ServerSocket不是Socket,但是可以通过accept方法监听端口产生Socket对象。
- TCP与UDP的差别
- TCP:有连接,可靠性高,像打电话,通信前必须建立连接。
- UDP:无连接,发送简单,像发邮件,可靠性不高,可能丢失数据包
- 网络常用命令
- ipconfig 查看网络配置信息,如ip地址
- ping 测试网络是否连通
- telnet 远程登陆
- ftp 登陆ftp
- Fport (xp下)查看计算机端口使用情况
- URL是统一资源定位符,可以打开一个到达资源的流,组成(协议,主机名,文件名)
2. 为你的系统增加网络功能(购物车、图书馆管理、斗地主等)-分组完成
为了让你的系统可以被多个用户通过网络同时使用,需要为你的系统增加网络功能。
2.1 简述你想为你的系统增加什么网络功能?设计思路是什么?
Answer:这次我想为我的购物车系统增加多个客户端可以同时连接同一个服务端查看购物车的操作。
- 设计思路:在服务端定义一个ServerSocket监听在端口上 ,每接收到一个Socket就建立一个新的线程来处理它。在客户端定义好要连接的服务端IP地址和与服务端对应的监听端口号。建立连接后就可以从服务端读信息操作。
2.2 系统通过网络传递了什么信息?信息的格式是什么?
Answer:向服务端传递了用户的登录信息,向客户端传递了购物车货品。
2.3 你的网络模块使用了TCP还是UDP技术?模块中的常用类是什么?
Answer:TCP,常用Socket类。
2.4 截图网络通讯部分的源代码与运行截图,并进行简单说明。
Answer:
-
服务端(定义一个ServerSocket在端口8000上监听 )
-
运行截图
-
简单说明:客户端与服务端建立连接后就可以往服务端写入登陆信息,服务端向客户端传送信息。
2.5 选做:使用自己编写的客户端访问系统。简述里面的核心代码。
-
客户端1(客户端2相同)
-
核心代码:使用
Socket socket = new Socket(host, port);
建立连接。
3. 码云与PTA
3.1 统计本周完成的代码量
需要将每周的代码统计情况融合到一张表中。
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
1 | 374 | 374 | 5 | 5 |
2 | 889 | 515 | 15 | 10 |
3 | 1417 | 528 | 22 | 7 |
4 | 1838 | 421 | 27 | 5 |
6 | 2608 | 770 | 38 | 11 |
7 | 3270 | 662 | 48 | 10 |
8 | 4068 | 798 | 52 | 4 |
9 | 4543 | 475 | 60 | 8 |
10 | 4988 | 445 | 65 | 5 |
11 | 5421 | 433 | 72 | 7 |
12 | 6327 | 906 | 88 | 16 |
13 | 6737 | 410 | 96 | 7 |
14 | 7406 | 669 | 105 | 9 |
选做:4. 网络学习指导(以下作业内容均为选做)
1. 网络基础
1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分析返回结果有何不同?为什么会有这样的不同?
- 第一张图我在虚拟机上ping的,后两张为我在Mac上ping的- .-随便看看
Answer: 由图中可以发现,访问接收的时长不一样,访问百度的耗时比较长,是和距离有关系。
1.2 telnet bbs.newsmth.net,上面这条命令连接的是远程主机的什么端口号?
Answer: 23,telnet的默认端口号为23
1.3 telnet cec.jmu.edu.cn 80,尝试回答:你从屏幕看到一些什么内容?返回的内容是不是cec.jmu.edu.cn的主页内容?尝试使用GET /index HTTP/1.0命令,会返回什么?详见实验任务书题目1。
Answer:屏幕是没有内容的。
-
如图:
-
使用命令后,返回了文本数据
1.5 编写网络程序必不可少的几个信息是什么?
Answer: 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进一步观察返回结果。没有任何返回结果,为什么?怎么修改代码才能正常显示?选做:为什么会返回乱码?如何解决?
Answer:因为cec.jmu.edu.cn连接的是http,需要添加"GET / HTTP/1.0\n"
- 这里没有产生乱码,由截图右下角可以看到就是使用UTF-8
2.4 启动网络调试助手,将其设置为TCP Server,并启动,如下图所示(作业中不要出现下图)
尝试使用Client.java连接该TCP Server,使用该服务器向Client发送信息。(截图关键代码与运行结果)
Answer:本题截图在2.1
5. 论述题:网络程序与流
5.1 前面编写的程序用到了大量的流的相关知识。简述,编写网络程序时应当选择什么样的流?Java网络编程、流之间的关系。任选一场景描述,场景如:简单的文字聊天、文件传输、应用层协议服务器,如QQ、聊天室、网络游戏。
Answer:简单的文字聊天可以使用输入流和输出流字节流以及字符流。
6. 代码阅读
阅读ServerAndThread目录中的源代码
6.1 修改程序,在GUI界面中某个地方显示自己的学号,然后运行该程序(截图、出现学号)。简述这个程序的主要功能。
Answer:该程序实现了客户端和服务端的通信
6.2 画出源代码的结构图(各个类的依赖关系)。