您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > java网络编程试卷及答案
A1、Java网络程序位于TCP/IP参考模型的哪一层?(B)a)网络层互联层b)应用层c)传输层网络d)主机-网络层2、以下哪些协议位于传输层?(AD)a)TCPb)HTTPc)SMTPd)UDPf)IP3、一个服务器进程执行以下代码:ServerSocketserverSocket=newServerSocket(80);Socketsocket=serverSocket.accept();intport=socket.getPort();以下哪些说法正确?(ACD)a)服务器进程占用80端口。b)socket.getPort()方法返回服务器进程占用的本地端口,此处返回值是80。c)当serverSocket.accept()方法成功返回,就表明服务器进程接收到了一个客户连接请求。d)socket.getPort()方法返回客户端套节字占用的本地端口。4、在客户/服务器通信模式中,客户与服务器程序的主要任务是什么?(BC)a)客户程序在网络上找到一条到达服务器的路由。b)客户程序发送请求,并接收服务器的响应。c)服务器程序接收并处理客户请求,然后向客户发送响应结果。d)如果客户程序和服务器都会保证发送的数据不会在传输途中丢失。1、B2、AD3、ACD4、BC二、填空题(邮件)1、名词解释SMTP:()2、主要的SMTP命令SMTP命令说明()指明邮件发送者的主机地址()指明邮件接收者的邮件地址()表示接下来将发送邮件内容1、简单邮件传输协议2、HELP/EHLOMAILFROMECPTTODATA三、简答题(线程池)写出五种使用线程池时应注意的事项,并进行简要说明?线程池可能会带来种种风险: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()方法,写出其方法源代码。publicEchoServer()throwsIOException{serverSocket=newServerSocket(port);System.out.println(服务器启动);}privatePrintWritergetWriter(Socketsocket)throwsIOException{OutputStreamsocketOut=socket.getOutputStream();returnnewPrintWriter(socketOut,true);}privateBufferedReadergetReader(Socketsocket)throwsIOException{InputStreamsocketIn=socket.getInputStream();returnnewBufferedReader(newInputStreamReader(socketIn));}publicvoidservice(){while(true){Socketsocket=null;try{socket=serverSocket.accept();//等待客户连接System.out.println(Newconnectionaccepted+socket.getInetAddress()+:+socket.getPort());BufferedReaderbr=getReader(socket);PrintWriterpw=getWriter(socket);Stringmsg=null;}publicEchoClient()throwsIOException{socket=newSocket(host,port);}B一选择题下列各题A、B、C、D四个选项中,只有一个选项是正确的。请将正确的结果打√1、问题:关于ServerSocket构造方法的backlog参数,以下哪些说法是正确的?(abdf)a)backlog参数用来显式设置操作系统中的连接请求队列的长度。b)如果没有设置backlog参数,那么连接请求队列的长度由操作系统决定。c)当服务器端的连接请求队列已满,客户端就无法建立与服务器的连接。d)如果backlog参数的值大于操作系统限定的队列的最大长度,那么backlog参数被忽略。e)连接请求队列直接由ServerSocket创建并管理。f)ServerSocket的accept()方法从连接请求队列中取出连接请求。2、问题:对于以下程序代码:ServerSocketserverSocket=newServerSocket(8000);serverSocket.setReuseAddress(true);哪个说法是正确的?(C)a)以上代码运行时出错b)以上代码编译时出错c)以上代码尽管编译和运行不会出错,但对SO_REUSEADDR选项的设置无效d)以上说法都不正确3、如何判断一个ServerSocket已经与特定端口绑定,并且还没有被关闭?(B)a)booleanisOpen=serverSocket.isBound();b)booleanisOpen=serverSocket.isBound()&&!serverSocket.isClosed();c)booleanisOpen=serverSocket.isBound()&&serverSocket.isConnected();d)booleanisOpen=!serverSocket.isClosed();4、问题:对于以下代码:intn=socketChannel.read(byteBuffer);//假定n=0byteBuffer.flip();假定执行socketChannel.read(byteBuffer)方法前,byteBuffer的容量、极限和位置分别为c、l和p,执行完以上代码后,byteBuffer的容量、极限和位置分别是多少?Ba)容量为c,极限为l,位置为p+nb)容量为c,极限为p+n,位置为0c)容量为l,极限为p+n,位置为0d)容量为c,极限为p+n,位置为p+n5、问题:线程执行Selector对象的select(longtimeout)方法时进入阻塞状态,在哪些情况,线程会从select()方法中返回?(abde)a)至少有一个SelectionKey的相关事件已经发生。b)其他线程调用了Selector对象的wakeup()方法。c)与Selector对象关联的一个SocketChannel对象被关闭。d)当前执行select()方法的线程被其他线程中断。e)超出了等待时间。6、问题:在HTTP响应结果中,哪个状态代码表示响应成功?选项:Da)404b)405c)500d)2007、问题:对于HTTP的GET请求方式,用户提交的表单数据位于HTTP请求的哪一部分?A选项:a)请求头中b)请求正文中一、选择题1、abdf2、c3、b4、b5、abde6、d7、a二、JAVA对客户程序的通信过程进行了抽象,提供了通用的协议处理框架,请用UML图显示客户端协议处理框架的主要对象模型。三、填空题HTTP协议规定,HTTP请求由3部分构成,分别是:请求:请求方式、URI、HTTP协议版本请求头请求正文与HTTP请求相似,HTTP响应也由3部分构成,分别是:响应:HTTP协议版本、状态代码、描述响应头响应正文四、编程题创建非阻塞的EchoServer1、处理接收连接就绪事件2、处理读就绪事件3、处理写就绪事件4、编码与解码5、在非阻塞模式下确保发送一行数据6、删除ByteBuffer中的已处理数据//创建一个Selector对象selector=Selector.open();//创建一个ServerSocketChannel对象serverSocketChannel=ServerSocketChannel.open();//使得在同一个主机上关闭了服务器程序,紧接着再启动该服务器程序时,//可以顺利绑定到相同的端口serverSocketChannel.socket().setReuseAddress(true);//使ServerSocketChannel工作于非阻塞模式serverSocketChannel.configureBlocking(false);//把服务器进程与一个本地端口绑定serverSocketChannel.socket().bind(newInetSocketAddress(port));publicvoidservice()throwsIOException{serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT);while(selector.select()0){//第一层while循环SetreadyKeys=selector.selectedKeys();//获得Selector的selected-keys集合Iteratorit=readyKeys.iterator();while(it.hasNext()){//第二层while循环SelectionKeykey=null;try{//处理SelectionKeykey=(SelectionKey)it.next();//取出一个SelectionKeyit.remove();//把SelectionKey从Selector的selected-key集合中删除if(key.isAcceptable()){处理接收连接就绪事件;}if(key.isReadable()){处理读就绪事件;}if(key.isWritable()){处理写就绪事件;}}catch(IOExceptione){}catch(IOExceptione){e.printStackTrace();try{if(key!=null){//使这个SelectionKey失效,//使得Selector不再监控这个SelectionKey感兴趣的事件key.cancel();key.channel().close();//关闭与这个SelectionKey关联的SocketChannel}}catch(Exceptionex){e.printStackTrace();}}}//#while}//#while}
本文标题:java网络编程试卷及答案
链接地址:https://www.777doc.com/doc-6837968 .html