java网络编程试卷及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
A1、Java网络程序位于TCP/IP参考模型的哪一层?(B)a) 网络层互联层b) 应用层c) 传输层网络d) 主机-网络层
2、以下哪些协议位于传输层?(A D)a) TCP b) HTTP c) SMTP d) UDP f)IP
3、一个服务器进程执行以下代码:ServerSocket serverSocket=new ServerSocket(80);Socket socket=serverSocket.accept(); int port=socket.getPort();以下哪些说法正确?(A C D)a) 服务器进程占用80端口。b) socket.getPort()方法返回服务器进程占用的本地端口,此处返回值是80。c) 当serverSocket.accept()方法成功返回,就表明服务器进程接收到了一个客户连接请求。d) socket.getPort()方法返回客户端套节字占用的本地端口。
4、在客户/服务器通信模式中,客户与服务器程序的主要任务是什么?(B C)a) 客户程序在网络上找
到一条到达服务器的路由。b) 客户程序发送请求,并接收服务器的响应。c) 服务器程序接收并处理客
户请求,然后向客户发送响应结果。d) 如果客户程序和服务器都会保证发送的数据不会在传输途中丢
失。1、B 2、A D 3、A C D 4、B C
二、填空题(邮件)1、名词解释SMTP:()
2
三、简答题(线程池)写出五种使用线程池时应注意的事项,并进行简要说明?
线程池可能会带来种种风险:1.死锁2.系统资源不足3.并发错误4.线程泄漏5.任务过载
使用线程池时需要遵循以下原则:(1)如果任务A在执行过程中需要同步等待任务B的执行结果,那
么任务A不适合加入到线程池的工作队列中。(2)如果执行某个任务时可能会阻塞,并且是长时间的
阻塞,则应该设定超时时间,避免工作线程永久的阻塞下去而导致线程泄漏。(3)根据任务的特点,对
任务进行分类,然后把不同类型的任务分别加入到不同线程池的工作队列中,这样可以根据任务的特点,
分别调整每个线程池。(4)调整线程池的大小。线程池的最佳大小主要取决于系统的可用CPU的数目
以及工作队列中任务的特点。(5)避免任务过载。
四、JAVA对客户程序的通信过程进行了抽象,提供了通用的协议处理框架,请用UML图显示客户端协议处理框架的主要对象模型。(20分)
五、编程题
用JAVA编写客户、服务器程序(利用ServerSocket和Socket编写)
1、创建EchoServer(写出主要程序代码并注释
2、输出流输入流通用方法
3、EchoServer类最主要方法为service()
方法,写出其方法中的代码。4、写出创建EchoClient的构造方法5、EchoClient类中,最主要的方法为talk()方法,写出其方法源代码。
public EchoServer() throws IOException {
serverSocket = new ServerSocket(port);
System.out.println("服务器启动"); }
private PrintWriter getWriter(Socket socket)throws IOException{
OutputStream socketOut = socket.getOutputStream();
return new PrintWriter(socketOut,true); }
private BufferedReader getReader(Socket socket)throws IOException{
InputStream socketIn = socket.getInputStream();
return new BufferedReader(new InputStreamReader(socketIn)); }
public void service() {
while (true) { Socket socket=null;
try { socket = serverSocket.accept(); //等待客户连接
System.out.println("New connection accepted "
+socket.getInetAddress() + ":" +socket.getPort());
BufferedReader br =getReader(socket);
PrintWriter pw = getWriter(socket);
String msg = null; }
public EchoClient()throws IOException{
socket=new Socket(host,port); }
B一选择题下列各题A、B、C、D四个选项中,只有一个选项是正确的。请将正确的结果打√
1、问题:关于ServerSocket构造方法的backlog参数,以下哪些说法是正确的?(a b d f)
a) backlog参数用来显式设置操作系统中的连接请求队列的长度。b)如果没有设置backlog参数,那么连接请求队列的长度由操作系统决定。c)当服务器端的连接请求队列已满,客户端就无法建立与服务器的连接。d)如果backlog参数的值大于操作系统限定的队列的最大长度,那么backlog参数被忽略。e)连接请求队列直接由ServerSocket创建并管理。f) ServerSocket的accept()方法从连接请求队列中取出连接请求。
2、问题:对于以下程序代码:
ServerSocket serverSocket=new ServerSocket(8000);serverSocket.setReuseAddress(true); 哪个说法是正确的?(C)a)以上代码运行时出错b)以上代码编译时出错c)以上代码尽管编译和运行不会出错,但对SO_REUSEADDR选项的设置无效d)以上说法都不正确
3、如何判断一个ServerSocket已经与特定端口绑定,并且还没有被关闭?(B)
a) boolean isOpen=serverSocket.isBound(); b)boolean isOpen=serverSocket.isBound() && !serverSocket.isClosed();
c) boolean isOpen=serverSocket.isBound() && serverSocket.isConnected(); d) boolean isOpen=!serverSocket.isClosed(); 4、问题:对于以下代码:int n=socketChannel.read(byteBuffer); //假定n>=0 byteBuffer.flip();
假定执行socketChannel.read(byteBuffer)方法前,byteBuffer的容量、极限和位置分别为c、l和p,执行完以上代码后,byteBuffer
的容量、极限和位置分别是多少?B a) 容量为c,极限为l,位置为p+n b) 容量为c,极限为p+n,位置为0 c) 容量为l,极限为p+n,位置为0 d) 容量为c,极限为p+n,位置为p+n
5、问题:线程执行Selector对象的select(long timeout)方法时进入阻塞状态,在哪些情况,线程会从select()方法中返回? (abde)
a) 至少有一个SelectionKey的相关事件已经发生。b) 其他线程调用了Selector对象的wakeup()方法。c) 与Selector 对象关联的一个SocketChannel对象被关闭。
d) 当前执行select()方法的线程被其他线程中断。e) 超出了等待时间。
6、问题:在HTTP响应结果中,哪个状态代码表示响应成功?
选项:D a)404 b)405 c)500 d)200
7、问题:对于HTTP的GET请求方式,用户提交的表单数据位于HTTP请求的哪一部分?A
选项:a) 请求头中b)请求正文中
一、选择题1、a b d f 2、c 3、b 4、b 5、abde 6、d 7、a
二、JAVA对客户程序的通信过程进行了抽象,提供了通用的协议处理框架,请用UML图显示客户端协议处理框架
的主要对象模型。