全国信息技术应用考试

ServerSocket类和Socket类主要完成TCP程序设计。

题目

ServerSocket类和Socket类主要完成TCP程序设计。

参考答案和解析
正确答案:正确
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

阅读以下程序说明和C++程序,将程序段中(1)~(7)空缺处的语句填写完整。

[说明]

使用MFC的CSocket类在两个或者多个应用程序之间建立通信。服务器应用程序先创建一个特殊的 Socket,用于监听客户应用程序的连接请求,然后再创建新的Socket来完成连接。从客户和服务器两端读取该连接,直到一个需要处理的报文到来为止。以下C++程序将封装这些功能,这样所有应用程序需要完成的只是创建一个Socket连接,然后处理到来的报文。这将包括一个新的服务器Socket类、新客户端Socket类和新的报文队列类。

创建新的服务器Socket类程序的框架如下。第1个函数ListenEx()用于通知Socket开始监听客户应用程序。第2个函数OnAccept()在接收到连接请求时被调用。在其中创建新的Socket,并立刻设置它开始从客户应用程序读取报文,这些是通过调用第3个函数RecvThread()来完成的,该函数位于它自己的线程中。

[C++程序]

[ListenEX()函数]


正确答案:这是一道要求读者使用Socket与另一个Windows应用程序或者与任何支持Socket的应用程序通信的编程题。本题的解答思路如下。 题干已给出“函数ListenEx()用于通知Socket开始监听客户应用程序”ListenEx()通过调用CSocket的Listen()函数监听来自客户应用程序的连接请求。ListenEx()同时在结构中设置其调用参数这些参数最终被传递到RecvThread()函数以实现读操作。因此()空缺处应填入“Listen()”。 函数OnAccept()在接收到连接请求时被调用。它使用文本编辑器(TextEdit)重载CSocket的OnAccept()函数在其中将创建新的Socket用于建立与客户应用程序的连接同时使用由用户定义的标识符作为关键字将该Socket保存到对象映射表中。然后设置Socket进入同步模式并创建一个线程从套接字中读取数据。因此(2)空缺处应填入“newCSocket”用于完成初始化工作。 函数RecvThread()使用CSocket的Receive()函数等待直到通过套接字接收到新的报文。该线程假定每一个报文包含固定字长的报头和可变长度的报文体。对于每一个新的套接字报文RecvThread()还向应用程序发送WM_New_MESSAGE消息通知新的报文等待处理。如果套接字关闭线程将在终止前向应用程序发送WM_DONE_MESSAGE消息所以(3)空缺处应填入“len+=res”。该函数没有返回值所以(4)空缺处应填入“return 0”。 接下来添加函数SendEx()向客户应用程序发回报文该函数将根据用户定义的标识符从对象映射表中取出Socket对象然后调用线程函数向该Socket发送报文因此(5)空缺处应填入“m_mapSockets[id]”。 SendThread使用CSocket类的Send()函数将报文数据发送出去因此(6)空缺处应填入“Send”。 服务器套接字类中的最后需要创建关闭函数这个函数不仅将关闭监听套接字而且将关闭创建的所有与客户端连接的套接字因此(7)空缺处应填入“Close()”。
这是一道要求读者使用Socket与另一个Windows应用程序或者与任何支持Socket的应用程序通信的编程题。本题的解答思路如下。 题干已给出“函数ListenEx()用于通知Socket开始监听客户应用程序”,ListenEx()通过调用CSocket的Listen()函数监听来自客户应用程序的连接请求。ListenEx()同时在结构中设置其调用参数,这些参数最终被传递到RecvThread()函数以实现读操作。因此()空缺处应填入“Listen()”。 函数OnAccept()在接收到连接请求时被调用。它使用文本编辑器(TextEdit)重载CSocket的OnAccept()函数,在其中将创建新的Socket,用于建立与客户应用程序的连接,同时使用由用户定义的标识符作为关键字将该Socket保存到对象映射表中。然后,设置Socket进入同步模式,并创建一个线程从套接字中读取数据。因此(2)空缺处应填入“newCSocket”,用于完成初始化工作。 函数RecvThread()使用CSocket的Receive()函数等待,直到通过套接字接收到新的报文。该线程假定每一个报文包含固定字长的报头和可变长度的报文体。对于每一个新的套接字报文,RecvThread()还向应用程序发送WM_New_MESSAGE消息,通知新的报文等待处理。如果套接字关闭,线程将在终止前向应用程序发送WM_DONE_MESSAGE消息,所以(3)空缺处应填入“len+=res”。该函数没有返回值,所以(4)空缺处应填入“return 0”。 接下来添加函数SendEx()向客户应用程序发回报文,该函数将根据用户定义的标识符从对象映射表中取出Socket对象,然后调用线程函数向该Socket发送报文,因此(5)空缺处应填入“m_mapSockets[id]”。 SendThread使用CSocket类的Send()函数将报文数据发送出去,因此(6)空缺处应填入“Send”。 服务器套接字类中的最后需要创建关闭函数,这个函数不仅将关闭监听套接字,而且将关闭创建的所有与客户端连接的套接字,因此(7)空缺处应填入“Close()”。

第2题:

Java提供的类进行有关Internet地址的操作类型是( )。

A、InetAddress

B、DatagramSocket

C、Socket

D、ServerSocket


参考答案:A

第3题:

程序设计语言通常分为( )。

A.4类

B.2类

C.3类

D.5类


正确答案:C

第4题:

下列关于ServerSocket类的说法,错误的是?()

A.ServerSocket类是被final关键字修饰的类,因此没有子类

B.ServerSocket类用于表示服务器端

C.ServerSocket类中的accept()方法会阻塞

D.创建ServerSocket对象时可以指定需绑定到的端口


答案:A
解析:ServerSocket类是一个普通方法,没有被final关键字所修饰,它有一个直接已知子类是SSLServerSocket

第5题:

在java.net包中提供了两个类______和ServerSocket,这两个类分别用来表示双向连接的客户端和服务端。

A.ClientSocket

B.Socket

C.clientsocket

D.socket


正确答案:B

第6题:

WebSocket和Socket的区别是什么:()

A、WebSocket是一个完整的应用层协议,包含一套标准的API

B、Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)

C、WebSocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,是建立在TCP之上的

D、Socket(TCP)是传输控制层协议,WebSocket是应用层协议


答案:ABCD

第7题:

以下哪个是ServerSocket类中用于接收来自客户端请求的方法( )。

A、getOutputStream()

B、get()

C、receive()

D、accept()


参考答案:D

第8题:

关于Socket通讯正确的是()。

A.客户端需要ServerSocket,需要绑定端口号

B.客户端需要Socket,需要绑定端口号

C.服务器端需要ServerSocket,需要绑定端口号和IP地址

D.服务器端需要ServerSocket,需要绑定端口号


正确答案:D

第9题:

阅读以下技术说明、Java源程序和运行测试部分,根据要求回答问题1和问题2。

【说明】

1.HTTP

◆ HTTP请求消息示例

GET/index,htmlHTTP/1.1

Accept:image/gif,image/jpeg,*/*

Accept-Language:zh-ch

Accept-encoding:gzip,deflate

User-Agent:Mozilla/4.0(compatible: MSIE6.0;Windows 2003)

Host:localhost:8080

Connection:Keep-Alive

◆ HTTP响应消息示例

HTTP/1.1 200 OK

Servert:Microsoft-IIS/6.0

Date:Mon,3 Jan 2008 13:13:33 GMT

Content-Type:text/html

Last-Modified:Mon,11 Jan 2008 13:23:42 GMT

Contelit-Length:112

<html>

...

</html>

2.相关类及主要成员函数

◆ ServerSocket类

服务器端套接字,它监听固定端口,以接收来自客户端的连接请求,一旦建立连接就返回一个Socket类型的对象,类中的主要成员函数如表6-16所示。

◆Socket类 基于连接的套接字,类中的主要成员函数如表6-17所示。

【Java源程序:一个简单的Web服务器】

/* WebScrvc.java */

packageobjclass;

import java.net.*;

import java.io.*;

public class WebServer{

public static final int PORT=8080; //Web服务器侦听的端口号

public static final String WEB_ROOT= SyStem.getProperty("user.dir")+

File.separator+"webroot";

//WEB_ROOT变量存放Web服务器工作目录,HTML, GIF图片等静态文件资源

private static final String SHUTDOWN_COMMAND="/shutdown";

//SHUTDOWN_COMM_AND变量保存关闭服务器的命令

private Boolean shutdown=false; //是否收到关闭服务器命令的标志

public static void main(Sting[] args) {

WebServer server=new WebServer();

Server.await ()

}

public void await() {

ServerSocket serverSocket = null;

try {

serverSocket = new (1);

//创建侦听端口号为PORT的ServerSocket类型的对象

System.out.println ("WebServerStarted!");

}

catch(IOException e) {

e.printStackTrace ();

SyStem. exit (1);

}

while(!shutdown) { //循环等待客房端连接

Socket socket = null;

InputStream input = null;

OutputStream utput = null;

try{

Socket =(2); //创建来自客房端的连接套接字

Input = socket.(3); //创建输入流

utput = socket.(4); //创建输出流

Request reque


正确答案:(1)ServerSocket(PORT)或serverSicket(PORT1InetAddress.getByName(“127.0.0.1”)) (2)serverSocket.accept()或其等价的带参数形式 (3)getInputStream()或其等价的带参数形式 (4)getOutputStream()或其等价的带参数形式 (5)parse()或其等价的带参数形式 (6)sendStaticResource()或其等价的带参数形式 (7)socket.close() (8)getUrl()
(1)ServerSocket(PORT)或serverSicket(PORT,1,InetAddress.getByName(“127.0.0.1”)) (2)serverSocket.accept()或其等价的带参数形式 (3)getInputStream()或其等价的带参数形式 (4)getOutputStream()或其等价的带参数形式 (5)parse()或其等价的带参数形式 (6)sendStaticResource()或其等价的带参数形式 (7)socket.close() (8)getUrl() 解析:这是一道要求读者掌握Socket通信的基本模型和Java的基本调用方法的综合分析题。本题的解答思路如下。
基于Socket的客户/服务器通信模式的基本模型。在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Server Model),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于两点:①建立计算机网络的原因是网络中软硬件资源运算能力和信息不均等,需要进行资源共享,从而需要拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用;②网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,也不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步。
客户/服务器模式在操作过程中采取的是主动请求方式。首先,服务器方要先启动,并根据请求提供相应服务。服务器方的操作过程如下。
1)打开一通信通道并告知本地主机,它愿意在某一公认地址上(即默认端口,如HTTP为80)接收客户请求;
2)等待客户请求到达该端口:
3)接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一个新进程来处理这个客户请求,新进程处理此客户请求,并不需要对其他请求做出应答。服务完成后,关闭此新进程与客户的通信链路,并终止:
4)返回第2)步,等待另一客户请求:
5)关闭服务器。
客户方的操作过程如下。
1)打开一个通信通道,并连接到服务器所在主机的特定端口:
2)向服务器发送服务请求报文,等待并接收应答,继续提出请求;
3)请求结束后关闭通信通道并终止。
从以上C/S操作过程可知,客户与服务器进程的作用是非对称的,因此双方各自的编码不同;服务进程一般是先于客户请求而启动的。只要系统运行,该服务进程一直存在,直到正常或强迫终止。
由于本试题没有给出完整的Java服务程序代码,因此需要考生对Socket通信的基本过程理解,要求熟悉Socket传送数据的基本方法。程序给出了对Response和Request对象的定义和两个对象的方法定义,但是方法的具体功能一定要注意看语句后面的注释,(1)~(8)空缺处所填写的内容也来自于后面注释的信息。另外,由于Java程序是区分大小写的,因此一定要弄清楚什么地方指的是类,什么地方是类的实例。因为类和类的实例的拼写通常就只有大小写的区别。
第(1)空缺处要求创建侦听端口号为PORT的ServerSocket类型的对象,那么只要调用ServerSocket类的构造函数就可以了,具体的参数可以参照表6-16中ServerSocket类构造函数的格式调用。因此(1)空缺处所填写的内容是“ServerSocket(PORT)”或“ServerSocket(PORT,1,InetAddress.getByName(“127.0.0.1”))”。
由(2)空缺处的注释内容可知,该空缺处所填写内容的作用是要创建来自客户端的连接套接字。从 ServerSocket类的成员函数表(见表6-16)中可知,其函数accept()的作用是返回建立连接的Socket类型的对象。因此(2)空缺处所填写的内容是“serverSocket.accept()”或其等价的带参数形式。
第(3)空缺处是要创建输入流,从Socket类的主要成员函数表(见表6-17)中可知,函数getInputStream()是返回当前对象关联的输入流。因此(3)空缺处应填入“getInputStream()”或其等价的带参数形式。
第(4)空缺处是要创建输出流,从表6-17中Socket类的getOutputStream()函数功能说明可知,getOutputStream()是返回当前对象关联的输出流。因此(4)空缺处应填入“getOutputStream()”或其等价的带参数形式。
第(5)空缺处是解析客户端HTIP请求,在Request.java程序中关于Request对象成员函数说明,语句“public void parse(){...parseUrl();...)”声明了,函数parse()的作用就是解析客户端HTTP请求消息。因此(5)空缺处所填写的内容是“parse()”或其等价的带参数形式。
第(6)空缺处是解析客户端发送所请求的静态资源,在Response.java程序中关于Response对象成员函数说明中,语句"public void sendStaticResource()throwsIOException{...}“声明了,函数sendStaticResource()的作用就是向客户端发送所请求的静态资源。因此(6)空缺处应填入“sendStaticResource()”或其等价的带参数形式。
第(7)空缺处是关闭套接字,可以直接调用Socket类的close()方法,即该空缺处所填写的内容是“socket.close()”。
第(8)空缺处要注意到其作用是要获取HTFP中的URL信息,从而决定是否关闭服务器。在Request.java程序关于Request对象成员函数的定义中,有3个与URL相关的成员函数。但是只有parseUrl(String requestString)可以解析出其中的URL,并且该函数要求有一个输入的参数,因此必须找出如何获得这个参数的方法。在题目所给出的信息中,只有Request对象的另一个成员函数getUrl()可以返回String类型的URL。因此(8)空缺处所填写的内容是“getUrl()”。

第10题:

面向对象程序设计方法把程序设计的焦点集中在( )。

A.对象和类的设计与实现

B.类和类层次结构的设计、实现和重用

C.方法、消息和继承性的设计与实现

D.数据和方法的封装


正确答案:B
解析:面向对象程序设计中,对类和类层次结构的设计、实现和重用是程序设计的重点。

更多相关问题