- 本周学习总结
1.1以你喜欢的方式(思维导图、OneNote或其他)归纳总结多网络相关内容。
- 为你的系统增加网络功能(购物车、图书馆管理、斗地主等)-分组完成
2.1 简述你想为你的系统增加什么网络功能?设计思路是什么?
- 需要增加的网络功能就是客户端与服务器建立连接,然后客户端访问图书馆相当于访问服务器,服务器处理并且回复处理结果。而且需要满足多个客户端访问服务器。
- 设计思路:增加一个
Threaded
类,该类实现了Runnable接口。其中的构造函数含有参数socket,这样可以在每有一个客户端访问监听端口的时候就产生一个线程以此实现多线程。run方法中处理客户端发来的消息并回复。
2.2 系统通过网络传递了什么信息?信息的格式是什么?
- 客户端通过网络向服务器传递了自己的目的,想要获取什么内容,而服务器将处理结果通过网络在传递给客户端。
- 信息的格式是字节流。
2.3 你的网络模块使用了TCP还是UDP技术?模块中的常用类是什么?
- 使用了TCP技术。保证了通信的可靠性。
- 模块中的常用类是:ServerSocket类,Socket类,Thread类。
2.4 截图网络通讯部分的源代码,并进行简单说明。
2.5 选做:系统中有出现多线程的冲突或者同步问题吗?
该系统实现了多线程。而且也不存在同步问题,以读者的身份进行一些操作在以管理员的身份查看不存在问题。但还有一点不足的是没有登录注册类的实现。不能准确标识一个客户端的用户名。
- 码云与PTA
3.1 统计本周完成的代码量
周次 | 总代码量 | 新增代码量 | 总文件数 | 新增文件数 |
---|---|---|---|---|
15 | 601 | 601 | 6 | 6 |
选做:4. 网络学习指导(以下作业内容均为选做)
1. 网络基础
1.1 比较ping www.baidu.com
与ping cec.jmu.edu.cn
,分析返回结果有何不同?为什么会有这样的不同?
1.2 telnet bbs.newsmth.net
,上面这条命令连接的是远程主机的什么端口号?
答:连接的是远程主机的23端口,由Telnet测试端口号得知。
1.3 telnet cec.jmu.edu.cn 80
,尝试回答:你从屏幕看到一些什么内容?返回的内容是不是cec.jmu.edu.cn的主页内容?尝试使用GET /index HTTP/1.0
命令,会返回什么?详见实验任务书题目1。
输入命令 telnet cec.jmu.edu.cn 80
什么也没看见
输入命令GET / HTTP/1.1
可以显示该网页的源代码
1.4 启动ConnectionWatcher, 然后启动若干个可以联网的程序(如QQ, telnet,浏览器等),查看本机上有什么程序联网,使用了什么端口?QQ占用了什么端口和那些远程IP进行交互,这些IP分布地在那里?使用了什么协议进行通信?
答:QQ使用了远程80端口和14.17.41.139(广东省深圳市 电信)交互,使用TCP协议
微信使用了80远程端口和182.254.92.140(广东省广州市 腾讯集团)交互,使用了TCP协议
360使用了80远程端口和140.206.78.6(上海市上海市 联通);180.163.238.166(上海市上海市 电信)交互,使用了TCP协议
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进一步观察返回结果。没有任何返回结果,为什么?怎么修改代码才能正常显示?选做:为什么会返回乱码?如何解决?
答:因为这样只是与远程服务器建立了连接,还没有向服务器发送http请求,所以看不到服务器资源,没有返回结果。我们应该向服务器发送Get / HTTP/1.0请求资源。
产生乱码的原因是OS的解码方式是GBK解码,而源代码是采用UTF-8编码的,不匹配的编码解码方式会产生乱码。解决方式是先将读入的内容按照GBK编码,然后在按照UTF-8解码,这样就不会乱码了。
还有另一种方法就是将eclipse的默认编码方式GBK改成UTF-8
运行结果显示已无乱码
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(截取关键代码证明你这个是多线程服务器,请使用多个telnet连接测试)。