分布式计算(二)——Socket通讯与HTTP服务器(1)

1.列出网络七层协议的名称,用一句话分别解释 传输层(TCP/UDP) 与 网络层(IP) 的功能。

应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

TCP/UDP:提供主机应用程序进程之间的端到端的服务.

IP:实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。

 

2.Socket 在哪一层? 解释端口号的作用。

传输层。

端口为标识参与通信的主机、进程和连接提供了一种统一的、惟一的方法。

 

3.TCP 也称 流式 Socket。 与流式文件存在联系吗?

存在。

流式文件是指在网络中可以进行流式传输的多媒体文件的集合,是有序字符的集合,其长度为该文件所包含的字符个数。流式传输的实现需要合适的传输协议,在流式传输的实现方案中,一般采用HTTP/TCP来传输控制信息。

 

4.阅读图2-8,连接 Socket 和 数据 Socket 相同吗? 为什么编程时,我们通常只自定义 4 位数的端口号?

不同。

连接Socket是专门用于接收客户程序的连接请求。

数据Socket是与某一客户程序的虚拟连接通道,用于数据传输等。

大多数 TCP/IP 实现给临时端口分配 1024~5000 之间的端口号。大于 5000 的端口号是 为其他服务器预留的。

 

5.文档中提到工厂方法。请用 UML 图画出 InetAddress , Inet4Address 和 Inet3Address 三者关系。

 

 

6.对照图2.9,写出每个步骤的关键代码。

服务器侦听并等待连接:

ServerSocket listenSocket = new ServerSocket(Integer.parseInt(args[0]));

Socket socket = listenSocket.accept();

客户端请求连接:

Socket socket = new Socket(args[0], Integer.parseInt(args[1]));

打开输入输出流:

PrintWriter out = new PrintWriter(socket.getOutputStream(), true);

BufferedReader in = new BufferedReader(new InputStreamReader

(socket.getInputStream()));

关闭连接:

out.close();

in.close();

socket.close();

 

7.(!)修改 MTEchoServer, 用 java 的 List<> 对象管理客户端连接的服务线程。当连接断开后,服务线程只是挂起。在新连接请求时,如果有挂起的服务线程,直接为新连接服务。

 

 

8.写出 RFC 和 IETF 的全称。 给出 HTTP1.1 协议的 RFC 编号以及全文的网址。

RFC:Requests for Comments,Internet标准草案定义组织

IETF:Internet Engineering Task Group,Internet 工程任务组

HTTP1.1协议的RFC编号:2616

全文网址:http://www.ietf.org/rfc/rfc2616.txt

 

9.阅读 Daytime 协议开发, 简单解释图 2-11 的含义。它对程序阅读的作用。

MyStreamSocket继承Socket,并添加了setStreams()方法用于创建数据输入流与输出流。

sendMessage()方法用于发送数据;receiveMessage()方法用于接收数据。

DaytimeServer2使用了MyStreamSocket和ServerSocket。

DaytimeClient2使用了DaytimeClientHelper2。

DaytimeClientHelper2使用了MyStreamSocket。

 

10.编程序经常会编写 xxHelper 类,请描述 DaytimeTCP 程序中,DaytimeClientHelper2 类发挥的作用。

DaytimeClientHelper2 类的主要作用是管理 DaytimeClient2 类与服务器的通信,包括通过 MyStreamSocket 类与服务器建立连接,getTimestamp()方法向服务端发送请求并接收 响应消息,receiveMessage()方法接收服务端的响应消息等。

 

11.运行 java 版本 HttpServer。设计 3 个 curl 指令,测试程序的三种输出响应,给出控制台输入与输出。

运行HttpServer

使用命令curl localhost

curl –v localhost,显示通信过程

使用 curl –o [文件名][网址]保存网页源代码

个人学习小结

通过本次实验,初步掌握了 Socket API 的相关概念以及网络协议的基本概念。对流式 Socket 的使用,TCP,UDP 协议有初步的了解,以及 HTTP协议并通过样例程序简单实践了利用流式 Socket 建立 TCP 连接,搭建基本的C/S 网络框架,搭建多线程的服务器,以及 Daytime 协议的开发。

Socket API

Socket是物理网络地址和逻辑端口号的一个集合,通过这个集合可以向另外一 个位置的与它具有相同定义的Socket进行数据传输。由于Socket是由机器地址和端 口号来识别的,那么在一个特定的计算机网络上,每一个Socket都是以此方式被唯 一识别的。这就使得应用程序可以唯一被定位。套接字类型有二种:一个是流式 Socket,它提供进程之间的逻辑连接,并且支持可靠的数据交换;另一个就是数据 包Socket,它是无连接的并且不可靠

数据报 Socket

流式文件是指在网络中可以进行流式传输的多媒体文件的集合,是有序字符的集合,其长度为该文件所包含的字符个数。

流式 Socket

流式传输的实现需要合适的传输协议,在流式传输的实现方案中,一般采用HTTP/TCP来传输控制信息。

应用层协议开发

Daytime协议开发

日期查询协议(Daytime Protocol)是时间传输协议,被广泛的被运行 MS-DOS 和类似的 操作系统的小型计算机使用,该协议不指定固定的传输格式,只要求按照 ASCII 标准发送数 据。它的作用就是返回当前时间和日期,格式是字符串格式。此协议篇幅很小,容易让初学者 理解协议内容和开发过程

FTP协议开发

文件传输协议 FTP(File Transfer Protocol)是一个用于在两台装有不同操作系统的计算机 之间传输计算机文件的软件标准,工作于应用层。FTP 服务一般运行在 20 和 21 两个端口。端 口 20 用于在客户端和服务器之间传输数据流,而端口 21 用于传输控制流。当数据通过数据流 传输时,控制流处于空闲状态。

HTTP协议开发

超文本传输协议 HTTP(HyperText Transfer Protocol)是专门用于传输 HTML 文档的协 议,1996 年发布的 RFC 1945和 1999年发布的 RFC 2616分别定义了 HTTP/1.0 和 HTTP/1.1。 HTTP 协议采用典型的“请求-答复”通信模型:客户程序建立与服务程序的连接后,向服务 程序发送一个服务请求;服务程序根据请求获取相应的 HTML 文档作为答复送回客户程序, 最后关闭连接

时间: 2024-11-03 22:32:23

分布式计算(二)——Socket通讯与HTTP服务器(1)的相关文章

分布式计算(四)——Socket通讯与HTTP服务器(3)

1.RESTful Webservice 作为远程调用(RPC),它的输入是什么?输入是什么?优输入URL,输出Json或者XML   2.有一个 Java 远程函数声明 public Customer getCustomer(String id),把 HTTP 协议输入/输出映射到该函数,至少要申明(annotation)哪些信息?请写出这些 annotation,并简单解释协议与函数的关系. 需要声明 HTTP 协议方法和项目根访问该方法的 URL 路径 @GET @Path("/custo

分布式计算(三)——Socket通讯与HTTP服务器(2)

1.用自己的语言简单说明 cgi 编程的优点和缺点 优点:有bug的程序不会使web服务器崩溃:程序容易引用. 缺点:应答时间长,CGI语言不是安全和面对对象的.   2.在 cgi 实验的基础上,简述 middleware 在程序开发中的作用 利用高层应用那个程序编程接口API来隔离操作系统和应用程序.   3.搜索 org.eclipse.jetty.server.handler.AbstractHandler 类 ·解释 Java API 页面的组织 ·这个类实现了哪个接口,这个接口有哪些

Photon服务器引擎(二)socket/TCP/UDP基础及Unity聊天室的实现

Photon服务器引擎(二)socket/TCP/UDP基础及Unity聊天室的实现 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API). 通过Socket,我们才能使用TCP/IP协议.实际上,Socket跟TCP/IP协议没有必然的联系.Socket编程接口在设计的时候,就希望也能适应其他的网络协议.所以说,Socket的出现只是使得程序员更方便地使用TCP/IP协议栈而已,是对TCP/IP协议的抽象,

Socket通讯探索(二)-socket集群

前面我们在章节“Socket通讯探索(一)”中如何实现一个tcp连接,但是这仅仅是一个最初级的BIO实现,且没有添加线程池,实际应用中很少采用这种方式,因为不得不考虑当大量的Tcp连接建立的时候,服务端如何安全稳定的运行?为什么呢? 1.BIO实现方式,是阻塞式的(上一节最后面的实现方式虽然无数据的时候,不会阻塞): 2.服务端为每条连接都开辟了一个线程进行处理,而且在连接不断开的情况下,线程不会得到释放: 基于以上情况,当有大量的连接建立的时候,服务端会开辟大量的线程处理并得不到释放,而线程会

C#网络编程系列文章(五)之Socket实现异步UDP服务器

原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 本文介绍 在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现.System.Net 命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TCPClient.TCPListener 和 UDPCl

客户端技术的一点思考(数据存储用SQLite, XMPP通讯用Gloox, Web交互用LibCurl, 数据打包用Protocol Buffer, socket通讯用boost asio)

今天看到CSDN上这么一篇< 彻底放弃没落的MFC,对新人的忠告!>, 作为一个一直在Windows上搞客户端开发的C++程序员,几年前也有过类似的隐忧(参见 落伍的感觉), 现在却有一些不同的想法. 首先,个人职业发展是否成功, 技术只是其中一小块,尤其是在大公司, 更多的是依靠所谓的软实力.作为一个对技术有追求的工匠,我们下面重点说技术相关的. 现在回头看计算机行业的发展,我们看到不同的发展阶段: 1. PC时代,这个时代离我们并不遥远, 也有是2000年前后, 该时代最鲜明的特征是Win

iOS开发socket通讯

写写socket通讯那些事儿.     socket通讯公司用于给服务器发一些指令用于控制智能家居类的设备.socket无非就是发过来发过去,至于具体内容跟服务器协商就好.接下来先说说与socket通讯配合使用的socket Tool 的mac 工具.首先打开工具(工具连接以及socket用到的文件:SocketToolfor_mac_and_Third_for_xocde_socket.zip)选择Tcp Server 然后点击创建 端口号输入一个数字,60000 把. 注意可能完成之后这个数

试解析Tomcat运行原理(一)--- socket通讯

关于这篇文章也确实筹划了很久,今天决定开篇写第一篇,说起tomcat首先很容易联想到IIS,因为我最开始使用的就是.net技术,我第一次使用asp写学生成绩管理系统后,很茫然如何让别人都能看到或者说使用这个系统呢?由此认识了IIS,它是一个web容器,天生的多线程,及时响应用户提交的请求返回html页面,这就是我了解的最初的web容器的功能,由此我们来认识tomcat也并不困难,可以的话,在了解完tomcat后我们可以继续了解jboss.jetty等,好我们进入主题. 我们在平时开发的过程中是在

Bind简单应用之二(正向解析主从服务器)

DNS主从服务器应用实验 实验环境    系统:Centos 6.3 X64 软件:Bind.x86_64 32:9.8.2-0.10.rc1.el6 主服务器: IP 10.0.0.101:netmask 255.255.255.0 :DNS 10.0.0.102:GW 10.0.0.1 从服务器: IP 10.0.0.102:netmask 255.255.255.0 :DNS 10.0.0.102:GW 10.0.0.1 1.分别在两台服务器上安装Bind软件 #yum install b