1.
应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
传输层的功能包括选择差错恢复协议还是无差错恢复协议,及在同一主机上对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功能。
网络层对端到端的包传输进行定义,它定义了能够标识所有结点的逻辑地址,还定义了路由实现的方式和学习的方式,还定义了如何将一个包分解成更小的包的分段方法。
2.
传输层。不同的端口号可以区分不同的数据来源,便于管理。不同的端口号有着不同的用途,例如TCP21端口是FTP文件传输服务端口。
3.
存在一定的相似性,但本质不同。
4.
不相同。连接Socket用于监听其他客户程序的连接请求,数据Socket用于与客户数据连接。有些端口号是保留的,作为编程者,一般只定义4位数的端口号。
5.文档中提到工厂方法。请用 UML 图画出 InetAddress ,Inet4Address和Inet3Address三者关系。
6.
(1)侦听并等待连接
ServerSocket listenSocket = new ServerSocket(Integer.parseInt(args[0]));
Socket socket = listenSocket.accept();
(2)请求连接
Socket socket = new Socket(args[0], Integer.parseInt(args[1]));
(3)建立连接Socket
PrintWriter out = PrintWriter(socker.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream());
(4)传送数据
String message;
while ((message = in.readLine()) != null)
{
out.println(message.toUpperCase());
}
(5)关闭连接
out.close();
in.close();
socket.close();
8.
Request For Comments(RFC);Internet Engineering Task Force(IETF);
RFC2616
http://www.cnblogs.com/k1988/archive/2010/01/12/2165683.html
9.
DaytimeServer侦听,一旦有连接建立,即MyStreamSocket获取到数据后,就返回ASCII形式的日期和时间。首先通过ServerSocket类的实例化产生流式Socket,并由MyStreamSocket类的实例对象的accept()方法监听客户端请求,等待客户端连接。当客户端收到请求后,由sendMessage()方法返回消息给客户端。
10.
Helper类通过getTimestamp()方法向服务端发送请求并接收响应信息。创建了MyStreamSocket类的实例对象mySocket,由实例对象的receiveMessage()方法接收服务端信息。
概而言之,xxHelper类负责与服务端的交互,包括发送请求以及接收信息。
11.
启动服务器,端口号为8080
第一个指令curl http://localhost:8080 不带参数
第二个指令 -o out
将指定curl返回保存为out文件,内容从html/jpg到各种MIME类型文件
第三个指令 -u username
使用用户名和密码登陆。
参考资料:http://www.cnblogs.com/sunada2005/p/3829772.html
阅读 “课后完成设计实验 HTTP 学号尾数为奇数同学完成.pdf”
①目标是改进服务器为多线程服务器,将原来的代码划分为监听器和处理器;搭建了简单的框架,主要使用了工厂方法、模板方法、Facade、策略和责任链的设计模式来提高重用性。
②HttpClientHelper,Handler
个人学习小结:
对Http协议有了基础的了解。
熟悉了流式Socket。
熟悉了简单的HttpServer的开发。
对Daytime协议和工厂方法有所了解。
知道了如何提升服务器性能,例如多线程和简单框架。