网络程序设计习题题目练习
《网络程序设计》期末考试复习题及参考答案
网络程序设计复习题(课程代码 252284)一.选择题1、编译Java Application 源程序文件将产生相应的字节码文件,这些字节码文件的扩展名为( )。
A. javaB. classC. htmlD. exe2、设int型变量x = 1 , y = 2 , z = 3,则表达式y+=z--/x++ 的值是( )。
A. 3B. 3. 5C. 4D. 53、在Java Applet程序用户自定义的Applet子类中,一般需要重载父类的( )方法来完成一些画图操作。
A. start( )B. stop( )C. init( )D. paint( )4、不允许作为类及类成员的访问控制符的是( )。
A. publicB. privateC. staticD. protected5、为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为( )。
A. static void method( )B. public void method( )C. final void method( )D. abstract void method( )6、下列浏览器中,可以运行HTML中的Applet,而忽略其他HTML命令的是( )。
A. Netscape 3.0B. Internet Explorer5.0C. Hot JavaD. Appletviewer7、以下哪一个不是JA V A的标准数据流( )。
A. 标准输出数据流B. 标准输入数据流C. 标准错误数据流D. 标准运算数据流8、下面声明数组的写法错误()。
A. int a[ ]; B: int[ ] a;C: int[ ][ ] a[3][ ]; D; int[ ][ ] a[ ][3];9: 设x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char 型变量,则表达式x+y*a/x+b/y+c的值为( )类型。
网络程序设计(JAVA)习题及参考答案
网络程序设计(JAVA)习题及参考答案《网络程序设计》(JAVA)复习题一、填空题1、Java源文件和编译后的字节码文件扩展名分别是________和________。
2、定义方法时,如果方法不返回任何结果,则方法返回类型写为________。
3、Java中的数据类型分两大类,分别为________和________。
4、字符和字符串常量分别用________和________引起来。
5、退出循环用________语句,继续新一次循环用________语句,从方法返回用用________语句。
6、类由________和________两部分组成。
7、类的继承和接口的实现分别用关键字________和________表示。
8、类成员的访问控制符可以是________、protected、默认和________。
9、集合类和输入/输出流类分别在________和________包中。
10、实现线程有两种方法,继承________类和实现________接口。
11、根据结构组成和运行环境的不同,JAVA程序可以分为两类:________和___________。
12、多态有________和_______两种表现形式。
13、Java构造数据类型有三种________、___________和___________。
14、通过类名直接调用的方法前要加修饰符___________。
15、单行注释和块注释分别用___________和___________表示。
16、表示字符串常量和变量的类分别是___________和___________。
17、假设int x=5,则表达式x++和++x的值分别为___________和___________。
18、构造方法调用本类其他构造方法和父类构造方法分别用___________和___________语句。
19、final类不能被___________,final方法不能被___________。
网络程序设计课后答案
网络程序设计课后答案【篇一:网络程序设计—asp(第3版尚俊杰编著)课后习题答案】txt>1. 选择题(可多选)(1)静态网页的扩展名一般是:a.htm b .phpc.aspd.jsp答案:a(2)asp文件的扩展名是:a.htmb. txtc. docd. asp答案:d(3)当前的web程序开发中通常采用什么模式?a. c/sb. b/sc. b/bd. c/c答案:b解释:c/s是客户机(client)/服务器(server),b/s是浏览器(browser)/服务器。
c/s一般要求用户有特定的客户端。
比如qq就是c/s模式,你的桌面上的qq就是腾讯公司的特定的客户端,而服务器就是腾讯的服务器。
而b/s模式则不需要特定的客户端,只要有普通浏览器,就可以访问到服务器了,web页就是b/s 模式。
(4)小王正在家里通过拨号上网访问搜狐主页,此时,他自己的计算机是:a. 客户端b. 既是服务器端又是客户端c. 服务器端d. 既不是服务器端也不是客户端答案:a(5)小王正在访问自己计算机上的网页,此时,他自己的计算机是: a. 客户端b. 既是服务器端又是客户端c. 服务器端d. 既不是服务器端也不是客户端答案:b(6)asp脚本代码是在哪里执行的?a. 客户端b. 第一次在客户端,以后在服务器端c. 服务器端d. 第一次在服务器端,以后在客户端答案:c解释:asp脚本代码是在服务器端运行的,服务器将其解释执行为标准的html代码,然后发送到客户端。
(7)在以下url中,从形式上看正确的是:a. .cn/history/1998/intro.aspb. .cn/news/1.jpg答案:a b c d解释:从形式上看,都是正确的。
(8)如果在chapter1下建立了一个子文件夹images,并且在其中放置了一个图片文件1.jpg,那么以下url正确的是:a. http://localhost/asptemp/chapter1/images/1.jpgb. http://127.0.0.1/asptemp/chapter1/images/1.jpg答案:a b(9)对于1.5.5节建立的1-2.asp,以下浏览方式正确的是:a. http://localhost/temp/1-2.aspb. http://127.0.0.1/temp/1-2.aspc. http://localhost/asptemp/chapter1/temp/1-2.aspd. http://127.0.0.1/asptemp/chapter1/temp/1-2.asp答案:a b c d解释:ab两种方式利用了建立的虚拟目录,cd实际上没有用到这个虚拟目录,此时和1-1.asp没有什么区别。
网络编程练习题
网络编程练习题
1. 编写一个程序,在本地机器上创建一个服务器,能够接收来自客户端的连接请求,并回送一个欢迎消息给客户端。
2. 在上述服务器的基础上,修改程序,使得它能够同时处理多个客户端的连接请求,并将每个客户端发送的消息广播给其他客户端。
3. 编写一个客户端程序,能够连接到上述服务器,并发送一个消息给服务器,服务器接收到消息后将其显示在控制台上。
4. 在上述服务器的基础上,修改程序,使得服务器能够接收客户端发送的文件,并保存到服务器的指定路径上。
5. 编写一个程序,在本地机器上创建一个UDP服务器,能够接收来自客户端的消息,并将消息回送给客户端。
6. 在上述UDP服务器的基础上,修改程序,使得服务器能够同时处理多个客户端的消息,并将每个客户端发送的消息广播给其他客户端。
7. 编写一个UDP客户端程序,能够连接到上述UDP服务器,并发送一个消息给服务器,服务器接收到消息后将其显示在控制台上。
请根据以上练习题,结合网络编程的知识和技巧,编写相应的程序进行练习。
网络编程是一个需要不断实践和探索的领域,通过不断练习和学习,你将能够掌握并灵活运用网络编程的技术。
祝你好运!。
程序设计基础练习题(全答案版)
《程序设计基础——C#.NET》练习参考答案:一、选择题的目的就是将____A____作为新一代操作系统的基础,对互联网的设计思想进行扩展。
A.互联网 B. Windows C. C# D. 网络操作系统2.假设变量x的值为10,要输出x值,下列正确的语句是__C__。
A.System.Console.writeline(“x”) B. System.Cosole.WriteLine(“x”)C. System.Console.WriteLine(“x={0}”,x)D. System.Console.WriteLine(“x={x}”)3.要退出应用程序的执行,应执行下列的_A___语句。
A. Application.Exit();B. Application.Exit;C. Application.Close();D. Application.Close;4.关于C#程序的书写,下列不正确的说法是__D________。
A.区分大小写B.一行可以写多条语句C.一条语句可以写成多行D.一个类中只能有一个Main()方法,因此多个类中可以有多个Main()方法5. 在C#语言中,下列能够作为变量名的是__C__。
A.if B. 3ab C. b_3a D. a-bc7. 能正确表示逻辑关系“a≥5或a≤0”的C#语言表达方式是__D__。
A.a>=5 or a<=0 B. a>=5|a<=0 C. a>=5&&a<=0 D. a>=5||a<=08. 以下程序的输出结果是___C_____。
A. 5B. 4C. 6D. 不确定9. If语句后面的表达式应该是__A___。
A.逻辑表达式 B. 条件表达式 C. 算术表达式 D. 任意表达式10.有如下程序:该程序的输出结果是__A___。
A. a=0,b=1B. a=1,b=1C. a=1,b=0D. a=2,b=211.以下叙述正确的是__D___。
网络程序设计复习题(带答案)
网络程序设计复习题1、为了实现网络的互联,互联网技术必须保证使用不同硬件结构的计算机能够进行通信适用于多种不同的操作系统、能够使用多种分组交换网络硬件2、因特网体系结构委员会的英文简称是ICCB3、协议的实现要落实到一个个具体的硬件模块和软件模块上,在网络中将这些实现特定功能的模块称为实体4、连接控制、流控制、报文分段等属于传输层功能5、IP数据报协议标识字段指明了IP数据报封装的协议,当标识字段为 6 时表示封装的是TCP协议6、ICMP报文不包括地址解析报文7、套接字是指IP地址和端口号的组合。
8、SOCKET编程中的全相关是指源端口号、目的端口号、源IP、目的IP、协议9、IP分组的中的TTL值描述,每经过一个路由器,它的值会减1是正确的10、TELNET通过TCP/IP协议模块在客户机和远程登录服务器之间建立一个TCP11、以下提供可靠服务不是UDP协议的特性12、虚拟局域网通常采用交换机端口号、MAC地址、网络层地址或IP广播组地址定义13、办公自动化服务不是网络操作系统提供的服务14、分析IP数据报所携带的TCP内容不是IP路由器应具备的主要功能15、java当中网络编程的接口是在java。
net包当中提供的。
16、会话的建立、维护和交互过程中的同步等属于会话层功能17、在网络层,IP模块根据IP数据报首部中的协议值决定将数据报中的数据交给哪一个模块去处理,当协议值为17,应将数据交给UDP模块处理18、ARP请求帧在物理网络中是以广播方式发送的19、ICMP在重组定时器超时情况下会产生数据报超时报告。
20、回应请求与应答报文的目的是对网络进行诊断和测试,使用它可以了解设备的可达性21、网络的功能主要由各层的协议来完成,互联网技术经过多年的发展形成了现在的TCP/IP协议。
22、为了保证网络的各个功能的相对独立性,以及便于实现和维护,通常将协议划分为多个子协议,并且让这些协议保持一种层次结构,子协议的集合通常称为协议簇。
2-网络程序设计复习题2-10计科-参考答案
网络程序设计复习题二1、是一个网络层的协议,它提供了错误报告和其它回送给源点的关于IP 数据报处理情况的消息ICMP2、IP协议的特征是不可靠,无连接3、TCP和UDP协议的相似之处传输层协议4、以下关于TCP滑动窗口说法正确的是滑动窗口机制的窗口大小是可变,从而更加有效利用带宽5、端口号的目的跟踪同一时间网络中的不同连接6、假定您在华为为Quidway路由器上配置了静态域名解析(DNS禁用),使用什么命令查看您配置的域名解析表?show dns7、TFTP服务器使用何种传输层协议,端口号多少?UDP 698、24、服务器一般都是通过特定的端口号来识别应用程序的,这些特定的端口号由IANA统一管理。
请问IANA管理的端口号范围是什么?1~10239、Internet采用的路由选择协议分为和两类。
内部网关协议;外部网关协议10、IP协议是TCP/IP协议簇中的,提供数据传输的最基本服务,是实现网络互联的。
核心协议;基本协议11、socket()函数的返回值是类型。
整数12、由于协议簇中的协议具有上下层关系,由此有称其为。
协议栈13、封装ARP报文时帧类型填,封装RARP报文时帧类型填0x0806;0x803514、BGP是用于不同自治系统之间交换路由信息的。
外部网关协议15、DNS服务器能够接收两种类型的解析:递归解析和解析。
反复16、WinSock编程中需要哪些文件?1)Winsock.dll:winsock.dll是Windows Sockets应用程序接口,用于支持很多Internet和网络相关应用程序。
2)Ws2_32.lib:32位windows socket,版本2用来实现socket网络操作的静态库。
该库对应ws2_32.dll,提供了对以下网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程(否则需要动态载入ws2_32.dll)3)Winsock2.h:winsock版本2头文件,里面包含一些系统定义的宏。
网络程序设计复习题(带答案)
网络程序设计复习题1、为了实现网络的互联,互联网技术必须保证使用不同硬件结构的计算机能够进行通信适用于多种不同的操作系统、能够使用多种分组交换网络硬件2、因特网体系结构委员会的英文简称是ICCB3、协议的实现要落实到一个个具体的硬件模块和软件模块上,在网络中将这些实现特定功能的模块称为实体4、连接控制、流控制、报文分段等属于传输层功能5、IP数据报协议标识字段指明了IP数据报封装的协议,当标识字段为 6 时表示封装的是TCP协议6、ICMP报文不包括地址解析报文7、套接字是指IP地址和端口号的组合。
8、SOCKET编程中的全相关是指源端口号、目的端口号、源IP、目的IP、协议9、IP分组的中的TTL值描述,每经过一个路由器,它的值会减1是正确的10、TELNET通过TCP/IP协议模块在客户机和远程登录服务器之间建立一个TCP11、以下提供可靠服务不是UDP协议的特性12、虚拟局域网通常采用交换机端口号、MAC地址、网络层地址或IP广播组地址定义13、办公自动化服务不是网络操作系统提供的服务14、分析IP数据报所携带的TCP内容不是IP路由器应具备的主要功能15、java当中网络编程的接口是在包当中提供的。
16、会话的建立、维护和交互过程中的同步等属于会话层功能17、在网络层,IP模块根据IP数据报首部中的协议值决定将数据报中的数据交给哪一个模块去处理,当协议值为17,应将数据交给UDP模块处理18、ARP请求帧在物理网络中是以广播方式发送的19、ICMP在重组定时器超时情况下会产生数据报超时报告。
20、回应请求与应答报文的目的是对网络进行诊断和测试,使用它可以了解设备的可达性21、网络的功能主要由各层的协议来完成,互联网技术经过多年的发展形成了现在的TCP/IP协议。
22、为了保证网络的各个功能的相对独立性,以及便于实现和维护,通常将协议划分为多个子协议,并且让这些协议保持一种层次结构,子协议的集合通常称为协议簇。
程序设计基础理论练习题(带答案)
程序设计基础理论练习题(带答案)程序设计基础理论练习题(带答案)1. 编程语言的发展历程从机器语言到高级语言的发展,现代计算机编程语言的分类和特点。
答案:编程语言的发展经历了多个阶段。
最早的计算机只能使用机器语言进行编程,这是一种由0和1组成的二进制代码。
随着计算机的发展,高级语言逐渐出现。
高级语言通过使用更接近自然语言的语法和结构,使得编程更加易于理解和用户友好。
现代计算机编程语言多种多样,比如C、Java、Python等。
它们各自有着不同的特点和用途。
2. 数据类型与变量不同编程语言中常见的数据类型和变量的定义、使用方法。
答案:不同编程语言中常见的数据类型包括整数、浮点数、布尔值、字符和字符串等。
变量用于存储不同类型的数据。
在大部分编程语言中,变量需要先定义,然后才能使用。
定义变量时需要指定变量名和数据类型。
变量名是用于标识变量的名称,而数据类型决定了变量可以存储的值的种类和范围。
使用变量时可以给其赋值或者读取其值。
3. 运算符常见的运算符有哪些?它们的功能和使用方法是什么?答案:常见的运算符包括算术运算符、比较运算符、逻辑运算符和赋值运算符等。
算术运算符包括加、减、乘、除、取余等,用于执行基本的数学运算。
比较运算符用于比较两个值的大小关系,包括等于、大于、小于等。
逻辑运算符用于处理布尔值,比如与、或、非等。
赋值运算符用于将一个值赋给一个变量。
4. 控制流程程序中常见的控制流程结构,包括条件判断和循环结构。
答案:程序中常见的控制流程包括条件判断和循环结构。
条件判断结构用于根据某个条件的真假来决定执行不同的代码段。
常见的条件判断结构有if语句和switch语句。
循环结构用于反复执行某段代码,直到满足某个条件才停止。
常见的循环结构有while循环、do-while循环和for循环。
5. 函数和模块函数和模块的定义和使用方法,函数的参数传递和返回值。
答案:函数是一段封装了特定功能的代码块,可以被反复调用。
网络程序设计考试大作业
网络程序设计考试大作业题目: 聊天室程序班级:学号:姓名:成绩:网络程序设计考试大作业 (1)一. 所使用的背景知识、主要函数的描述 (3)二. 程序设计思想及程序设计流程框图 (3)三. 主要代码及代码运行结果 (4)1.启动服务器 (4)2.登录 (6)3.注册 (10)4.登录和注册判定 (12)5.进入聊天界面 (13)6.私聊页面17一. 所使用的背景知识、主要函数的描述背景:根据现在最流行的聊天工具QQ, 模仿一部分主要功能来完成。
主要函数:public class Server;服务器的创建。
public class Client;客户端的创建。
public class UserInformation;用户信息的保存和验证。
二. 程序设计思想及程序设计流程框图设计思想:利用socket与server socket在客户端与客户端之间的通信, InputStream InputStreamReader输入输出流进行信息的发送与接收。
程序设计流程:主页面: 输入账号与密码, 点击登录或者注册进入下一页面。
登录:判定是否正确, 正确则进去聊天界面。
注册: 进去注册界面, 成功则返回主页面。
进入聊天室: 能发送信息让在线的所有人看到。
私聊界面:能与一个人单独聊天, 信息只能被双方看到。
三. 主要代码及代码运行结果1.启动服务器代码:public class Server {ServerSocket server ;static int clientNum = 0;// 存放与服务器连接上的对应的Socket, 作用是保存服务器与客户端之间的流, 便于服务器给每个客户端进行回发消息List<Socket> clientConnection = new ArrayList<Socket>();public Server() {try {server = new ServerSocket(9999);System.out .println("服务器已经启动");} catch (IOException e ) {e .printStackTrace();System.out .println("服务器启动失败");}}// 内部类, 监听客户端是否有连接到服务器, 并将此客户端的Socket传递给HandleSocket进行处理, 同时将client存放到List中, 即clientConnection中class SocketListener implements Runnable {public void run() {Socket client;try {while (true) {client = server.accept();// 连接上一个就压入List中, 即clientConnection中clientConnection.add(client);HandleSocket hs = new HandleSocket(client);// 连接上就让HandleSocket去处理new Thread(hs).start();}} catch (IOException e) {System.out.println("客户连接服务器失败");}}}// 内部类处理一个Socket,接收一个Client发送过来的消息, 并且服务器原封不动的返回给所有客户端, 客户端对消息进行过滤class HandleSocket implements Runnable {Socket client;HandleSocket(Socket client) {this.client = client;}public void run() {try {clientNum++;// 启用输入流InputStream is = client.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);System.out.println("第" + clientNum + "个客户端连接进入服务器");boolean flag = true;String s;do {// 对用户发来的消息进行群发给客户端s = br.readLine();System.out.println("接受到一个客户端消息: " + s);for (int i = 0; i < clientConnection.size(); i++) {Socket client = clientConnection.get(i);OutputStream os = client.getOutputStream();PrintStream ps = new PrintStream(os);ps.println(s);}} while (flag);client.close();} catch (IOException e) {System.out.println("有一个客户断开与服务器的连接");}}}界面:2.登录代码:package com.qq.main;import java.awt.Color;import java.awt.Dimension;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;import com.qq.regist.Regist;import erInformation;/*** 主界面*/public class Main extends JFrame {//组件的内容private JLabel userId;private JLabel userPassword;private JTextField inputId;private JPasswordField inputPassword;private JButton btLogin;private JButton btRegist;Main() {userId = new JLabel("帐号");userPassword = new JLabel("密码");inputId = new JTextField(6);inputPassword = new JPasswordField();btLogin = new JButton("登陆");btRegist = new JButton("注册");// 设置窗体属性Toolkit tk = Toolkit.getDefaultToolkit();Dimension screenSize = tk.getScreenSize();//得到当前屏幕的长和宽int x = (int) screenSize.getWidth();int y = (int) screenSize.getHeight();this.setBounds((x - 240) / 2, (y - 600) / 2, 240, 600);//窗口显示的大小 , 位置this.setResizable(false);//窗口大小不能改变this.setLayout(null);//默认的格式this.setBackground(Color.BLACK);// 窗口的颜色this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出程序// 设置JLabel属性userId.setBounds(30, 160, 40, 20);userPassword.setBounds(30, 200, 40, 20);// 设置文本域属性inputId.setBounds(90, 160, 100, 20);inputPassword.setBounds(90, 200, 100, 20);inputPassword.setEchoChar('*');//用*显示代替你输入的密码// 设置JButton属性btLogin.setBounds(50, 240, 60, 20);btRegist.setBounds(120, 240, 60, 20);// 注册“登陆”按钮监听器btLogin.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {UserInformation user = new UserInformation();String userName = inputId.getText();String userPassword = new String(inputPassword.getPassword());if (userName.equals("")) {JOptionPane.showMessageDialog(null, "用户名不能为空");} else if ("".equals(userPassword)) {JOptionPane.showMessageDialog(null, "密码不能为空");} else if (user.isExist(userName)&& erInfomation.getProperty(userName).equals(userPassword)) {new AllTalkFrame(userName).setVisible(true);// 判断成功后new一个群聊窗口Main.this.dispose();} else {JOptionPane.showMessageDialog(null, "此用户名不存在或者密码不正确");}}});// 注册“注册”按钮监听器btRegist.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {new Regist();//注册页面}});this.add(userId);this.add(userPassword);this.add(inputId);this.add(inputPassword);this.add(btLogin);this.add(btRegist);this.setVisible(true);}public static void main(String[] args) {new Main();}}界面:3.注册代码:// 注册“提交”按钮的监听器btSubmit.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String userName = inputId.getText();String userPassword = newString(inputPassword.getPassword());String userPasswordConfirm= new String(inputPasswordConfirm.getPassword());System.out.println("您点击了提交按钮");if (userName.equals("")) {JOptionPane.showMessageDialog(null, "用户名不能为空");} else if ("".equals(userPassword)|| "".equals(userPasswordConfirm)) {JOptionPane.showMessageDialog(null, "密码和密码重复都不能为空");} else if (!userPassword.equals(userPasswordConfirm)) {JOptionPane.showMessageDialog(null, "密码和密码重复不一致");} else {UserInformation user = new UserInformation();if (user.isExist(userName)) {JOptionPane.showMessageDialog(null, "此用户名已存在");} else {JOptionPane.showMessageDialog(null, "注册成功");user.insert(userName,userPassword);//UserInformation类Regist.this.dispose();}}}});// 注册“取消”按钮的监听器btCancel.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {System.out.println("您点击了取消按钮");Regist.this.dispose();}});界面:4.登录和注册判定代码://注册一个用户public void insert(String userName, String userPassword) { try {userInfomation = new Properties();InputStream is;OutputStream os;is = new ("c:/userInfo.properties");os = new ("c:/userInfo.properties", true);userInfomation.load(is);// 将用户名和密码存储到内存中userInfomation.setProperty(userName, userPassword);// 将用户名和密码保存到文件中userInfomation.store(os, null);} catch ( e1) {System.out.println("文件userInfo.properties没有找到 ");} catch (IOException e) {System.out.println("写 userInfo.properties 出错");}}//判断此用户名是否存在public boolean isExist(String userName) {try {userInfomation = new Properties();InputStream is;is = new ("c:/userInfo.properties");userInfomation.load(is);if (userInfomation.containsKey(userName)) {return true;}} catch ( e1) {System.out.println("文件userInfo.properties没有找到 ");} catch (IOException e) {System.out.println("写 userInfo.properties 出错");}return false;}5.进入聊天界面代码:class showOldMessageThread implements Runnable {public void run() {boolean flag = true;while (flag) {try {// 接收群聊服务器端回发过来的消息String serverOutput = client.br.readLine() + "\r\n";if (!serverOutput.startsWith("私聊")&& !serverOutput.startsWith("*")&& !(serverOutput.substring(serverOutput.indexOf(": ") + 1).equals("\r\n"))) {String s1 = serverOutput.replace('说', ' ');String s = s1.replaceAll("�", "\r\n ");oldMessageTextArea.append(s);}// 添加客户端的用户在线列表if (!serverOutput.startsWith("*")&& !serverOutput.startsWith("私聊")&& (serverOutput.indexOf("说") != -1)) {String listName = serverOutput.substring(0,serverOutput.indexOf('说'));// 如果JList中有相同名字的用户, 则不添加, 否则添加if (!users.contains(listName)) {System.out.println("用户" + listName + "上线了");users.add(listName);userList.setListData(users);}}// 判断服务器回发过来的消息是不是以"私聊"开头的, 是的话就提取出这两个用户名if (serverOutput.startsWith("私聊")) {String siliaoName1 = serverOutput.substring(serverOutput.indexOf("*") + 1, serverOutput.indexOf("和"));String siliaoName2 = serverOutput.substring(serverOutput.indexOf("和") + 1, serverOutput.indexOf("\r"));String siliaoBenshen = "";String siliaoDuixiangName = "";if (siliaoName1.equals(clientName)) {siliaoBenshen = siliaoName1;siliaoDuixiangName = siliaoName2;} else {siliaoBenshen = siliaoName2;siliaoDuixiangName = siliaoName1;}// 判断这两个名字中是否有与自己同名的, 有的话就弹出个私聊窗口if (siliaoName1.equals(clientName)|| siliaoName2.equals(clientName)) {new PointToPointTalkFrame(siliaoBenshen + "和"+ siliaoDuixiangName).setVisible(true);}}} catch (IOException e1) {System.out.println("读取服务器端消息出错");}}}}// 注册JList的点击事件, 进入私聊界面userList.addMouseListener(new MouseAdapter() {public void mouseClicked(MouseEvent e) {if (e.getClickCount() == 2) {if (erList.getSelectedValue().toString().equals(clientName)) {JOptionPane.showMessageDialog(null, "不能和自己聊天");} else {String PToPMemberName = "私聊"+ "*"+ clientName+ "和"+erList.getSelectedValue().toString();client.ps.println(PToPMemberName);}}}});界面:6.私聊页面代码:// 线程: 只要服务器端有消息, 就将消息显示到oldMessageTextAreaclass showOldMessageThread implements Runnable {public void run() {boolean flag = true;while (flag) {try {// 接收服务器端回发过来的消息String serverOutput = client.br.readLine() + "\r\n";System.out.println("私聊服务器发过来的消息: " + serverOutput);// 将消息中的两个用户名提取出来String s1 = "";if (serverOutput.startsWith("私聊")) {String[] s;if (serverOutput.startsWith("私聊*")) {s = serverOutput.substring(3,serverOutput.indexOf("\r")).split("和");} else {s = serverOutput.substring(2,serverOutput.indexOf("说")).split("和");}for (int i = 0; i < s.length; i++) {s1 = s1 + s[i];}}// 将标题中的两个用户名提取出来,有两种顺序String[] title = clientName.split("和");String s2 = "";for (int i = 0; i < title.length; i++) {s2 = s2 + title[i];}String s3 = "";for (int i = title.length - 1; i >= 0; i--) {s3 = s3 + title[i];}// 判断服务器端返回消息中的两个用户名等于客户端的两个用户名(忽略顺序), 则将消息显示出来(也就是显示在私聊窗口上)if (s1.equals(s2) || s1.equals(s3)) {String ss1 = serverOutput.substring(2, serverOutput.indexOf("和"));String ss2 = serverOutput.substring(serverOutput.indexOf(": "));// 将私聊客户端返回来的一行字符串按"�"进行拆分成多行, 显示在私聊的oldMessageArea中if (ss2.indexOf("�") != -1) {ss2 = ss2.replaceAll("�", "\r\n ");}oldMessageTextArea.append(ss1 + ss2);}} catch (IOException e1) {System.out.println("读取服务器端消息出错");}}}}界面:。
程序设计题库及答案详解
程序设计题库及答案详解一、选择题1. 下列哪个选项不是面向对象编程的三大特性?A. 封装B. 继承C. 多态D. 过程化答案:D2. 在Java中,以下哪个关键字用于定义类?A. classB. interfaceC. enumD. struct答案:A3. 以下哪个是Python中的循环结构?A. forB. whileC. both A and BD. none of the above答案:C二、填空题1. 程序设计中的________是用来定义数据的属性和方法的集合。
2. 在C语言中,________关键字用于声明一个函数。
答案:void 或者 int(根据函数返回类型而定)3. 在JavaScript中,________方法用于将字符串转换为数字。
答案:parseInt 或 parseFloat(根据转换类型而定)三、简答题1. 请简述什么是递归函数,并给出一个简单的递归函数示例。
答案:递归函数是指在函数内部调用自身的函数。
递归函数通常用于解决可以分解为相同问题的子问题的问题。
以下是一个计算阶乘的递归函数示例:```cint factorial(int n) {if (n == 0) return 1;return n * factorial(n - 1);}```2. 解释什么是堆栈,并说明它们在程序设计中的应用。
答案:堆栈是两种不同的数据结构。
堆是一种优先队列,其中最大或最小元素可以在对数时间内被找到。
栈是一种遵循后进先出(LIFO)原则的数据结构。
在程序设计中,堆栈广泛应用于内存管理、函数调用、表达式求值、回溯算法等领域。
四、编程题1. 编写一个函数,实现字符串的反转。
```pythondef reverse_string(s):return s[::-1]```2. 给定一个整数数组nums,请找出数组中最长递增子序列的长度。
答案:```pythondef lengthOfLIS(nums):if not nums: return 0dp = [1] * len(nums)for i in range(1, len(nums)):for j in range(i):if nums[i] > nums[j]:dp[i] = max(dp[i], dp[j] + 1)return max(dp)```五、案例分析题1. 描述一个场景,其中使用多线程可以提高程序的效率,并解释为什么。
网络程序设计复习题
网络程序设计复习题网络程序设计复习题一选择题1. 使用动作可以在jsp页面中得到Bean实例的属性值,并将其转换成( )类型数据,发送到客户端。
A StringB doubleC ObjectD string2 使用动作可以在jsp页面设置Bean的属性,必需保证Bean中有对应该属性的( )方法。
A SetXXX 方法B setXXX方法C getXXX 方法D GetXXX方法3. 下列哪一项不是Servlet中使用的方法( )A doGet() 方法B doPost() 方法C service() 方法D close() 方法4. 下面哪一项对Servlet 描述是错误的( )A Servlet 是一个特殊的java类,它必需直接或间接的实现Servlet 接口B Servlet接口定义了Servlet的生命周期。
C 当多个客户请求一个Servlet是,服务器为每个客户端启动一个进程D Servlet客户线程调用service方法响应客户端的请求5 下面Servlet的( )方法在载入时执行,且只执行一次,负责对Servlet进行初始化工作A service() 方法B init() 方法C doPost() 方法D destroy() 方法6 下面关于MVC 框架描述错误的是( )A 提高了应用程序的更容易扩展性B 代码的复用性较低C 模块化更加清晰D 设计程序更容易7 阅读代码JavaBeanClass bean=new JavaBeanClass(parameter);HttpSession session=request.getSession(true);session.setAttribute(“keyword”,bean);在该代码中创建的bean,下列叙述正确的是( )A request 周期的BeanB application 周期的BeanC session周期的BeanD page周期的Bean8 在部署Servlet时, web.xml 文件中标签应该包含哪些标签( ) 多选题ABCD9 为了获得用户提交的表单参数,可以从( )接口中得到A ServletResponseB ServletC RequestDispatcherD ServletRequest10 以下哪个对象可以获得浏览器发送的请求( )A HttpServletResponseB HttpServletRequestC HttpD HttpServlet11 在java WEB应用程序中一个HttpSession对象表示( )A 一个TCP/IP连接B 一个物理连接C 客户机和WEB服务器之间的一组交互D Http请求12 以下哪些是HttpSession 会话的跟踪技术( )多选题A URL重写B 表单隐藏域C Cookie技术D 以上都不是13 下列哪个是jsp 的注释标记( )A <%@ %>B <%! %>C <%-- --%>D <% %>14 下列哪个是jsp的内置对象( )A envB pageC jspinfoD context15 以下哪个不是EL定义的隐式对象( )A cookieB pageContextC initParamD attribute16 在WEB 应用程序根目录中,可以存放以下( )文件A class 文件B web.xmlC jar 文件D html 文件17 JDBC中用来表示数据库连接对象的是( )A StatementB ConnectionC DriverManagerD ResultSet18 用于封装Statement对象的返回结构是( )A ArrayListB VectorC ResultSetD Connection19 以下不属于jsp标准指令的是( )A taglibB includeC importD page20 用于调用存储过程的对象是( )A ResultSetB DriverManagerC CallableStatementD PreparedStatement21 当多个用户请求同一个JSP页面时,WEB服务器为每个客户自动创建一个()A 进程B 线程C 服务D 程序22 jsp 的编译指令通常指( )A page; include; pluginB page; include;taglibC page; include; uriD page; include;import23 在jsp页面中可以在以下哪个标记内插入java代码( )A <%! %>B <% -- --%>C <% %>D <%= %>24 下列哪一项不属于jsp动作( )ABCD25 jsp的page指令属性language的属性值默认是( )A C#B JavaScriptC jspD java26 可以在以下哪个标记内进行方法或者变量声明且在整个当前页面中有效( )A <% %>B <%! %>C <%= %>D <%-- --%>27 动作的scope的取值范围可以是以下哪些( )多选题A pageB applicationC responseD session28 下列变量声明在( )范围内有效。
python程序设计100题
python程序设计100题1.打印"Hello, World!"2.计算2 + 33.计算10 * 54.计算25 / 45.计算10 ** 26.将字符串"Hello" 转换为小写7.将字符串"Hello" 转换为大写8.将字符串"Hello" 反转9.将字符串"Hello" 中的第一个字符替换为"a"10.将字符串"Hello" 中的所有字符替换为"a"11.检查一个数字是否为偶数12.检查一个数字是否为奇数13.将一个数字的位数相加14.将一个数字的四舍五入到最接近的整数15.将一个数字的四舍五入到最接近的十位数16.将一个数字的四舍五入到最接近的百位数17.将一个数字的四舍五入到最接近的千位数18.检查一个字符串是否为空19.检查一个字符串是否为非空20.将一个字符串中的所有字母转换为大写21.将一个字符串中的所有字母转换为小写22.将一个字符串中的所有单词首字母大写23.将一个字符串中的所有单词反转24.将一个字符串中的所有单词连接在一起,中间用空格分隔25.检查一个列表是否为空26.检查一个列表是否为非空27.将一个列表中的所有元素相加28.将一个列表中的所有元素相乘29.将一个列表中的所有元素相除30.将一个列表中的所有元素取模31.将一个列表中的所有元素平方32.将一个列表中的所有元素立方33.将一个列表中的所有元素开方34.将一个列表中的所有元素对数35.将一个列表中的所有元素自然对数36.将一个列表中的所有元素阶乘37.将一个列表中的所有元素取反38.将一个列表中的所有元素平方根39.将一个列表中的所有元素倒数40.将一个列表中的所有元素绝对值41.检查一个元组是否为空42.检查一个元组是否为非空43.将一个元组中的所有元素相加44.将一个元组中的所有元素相乘45.将一个元组中的所有元素相除46.将一个元组中的所有元素取模47.将一个元组中的所有元素平方48.将一个元组中的所有元素立方49.将一个元组中的所有元素开方50.将一个元组中的所有元素对数51.将一个元组中的所有元素自然对数52.将一个元组中的所有元素阶乘53.将一个元组中的所有元素取反54.将一个元组中的所有元素平方根55.将一个元组中的所有元素倒数56.将一个元组中的所有元素绝对值57.定义一个函数,将两个数字相加并返回结果。
网络程序设计练习题
网络程序设计练习题一、选择题1、在传统的HTML页面中加入()就构成了一个JSP页面文件。
A、JAVA程序片B、JSP标签C、用“<%”、“%>”标记符号括起来的程序D、JAVA程序片和JSP标签2、当多个客户请求同一个JSP页面时,JSP引擎为每个客户启动()。
A、一个线程B、一个进程C、一个JAVA文件D、一个class文件3、配置JSP运行环境,若WEB应用服务器选用TOMCAT,以下说法正确的是:()A、先安装TOMCAT,再安装JDKB、先安装JDK,再安装TOMCATC、不需安装JDK,安装TOMCAT就可以了D、JDK和TOMCAT只要都安装就可以了,安装顺序没关系4、对于“<%!”、“%>”之间声明的变量,以下说法正确的是:()A、不是JSP页面的成员变量B、多个用户同时访问该页面时,任何一个用户对这些变量的操作,都会影响到其他用户C、多个用户同时访问该页面时,每个用户对这些变量的操作都是互相独立的,不会互相影响D、是JSP页面的局部变量5、对于“<%”、“%>”之间声明的变量,以下说法正确的是:()A、是JSP页面的成员变量B、多个用户同时访问该页面时,任何一个用户对这些变量的操作,都会影响到其他用户C、多个用户同时访问该页面时,每个用户对这些变量的操作都是互相独立的,不会互相影响D、不是JSP页面的局部变量6、在客户端浏览器的源代码中可以看到()A、JSP注释B、HTML注释C、JSP注释和HTML注释D、JAVA注释7、page指令的作用是:()A、用来定义整个JSP页面的一些属性和这些属性的值B、用来在JSP页面内某处嵌入一个文件C、使该JSP页面动态包含一个文件D、指示JSP页面加载Java plugin8、以下程序中,正确的是()A、<%@ page import=”Java.util.*,Java.awt.*” %>B、<%@ page import=”Java.util.*”,”Java.awt.*” %>C、<%@ page import=”Java.util.*;Java.awt.*” %>D、<%@ page import=”Java.util.*”;”Java.awt.*” %>9、page指令的import属性的作用是()A、定义JSP页面响应的MIME类型B、定义JSP页面使用的脚本语言C、为JSP页面引入JAVA包中的类D、定义JSP页面字符的编码10、page指令的()属性可以设置JSP页面是否可多线程访问A、sessionB、bufferC、isThreadSafeD、info11、()可在JSP页面出现该指令的位置处,静态插入一个文件。
网络程序设计习题按类型连续编号
网络程序设计复习题2012.11 沈阳大学莫晔一、填空题1.从浏览器向Web服务器发出的访问某个Web网页的请求叫做。
2.常见的Web服务器软件有和。
3.目前开发模式技术的两大主流技术是模式和模式。
框架主要有3部分组成,分别是:、和。
语言提供了一个编译器,当网页第一次被访问时,就会编译生成一种通用的。
框架包括一个庞大的类库。
为了便于调用,将其中的类按照进行逻辑分区。
的命名空间全部位于下。
8.Visual Studio 2008提供了“设计”、“ ”和“源”3种视图。
9.Visual Studio 2008主窗口包括了多个窗口,最左侧的是,用于服务器控件的存放。
10.可以在窗口设置控件的属性。
11.HTML是_______的英文缩写,中文意思是_______。
12.一个基本的HTML文档通常包括3对顶级标记________、________、和________。
13.通过<BODY>标记的________属性可以设置见面的背景图像,通过_____________属性可以设置页面文字的颜色。
14.想让段落居中显示,可以设置<p>标记的align 属性为_______________。
15.URL的中文名称为______________________。
16.<a>标记的____________属性可以指定单击超链接文本后要跳转到的目标网页的URLXXX17.如果当前网页的位置为:c:\my documents\my web\index.htm,链接页面的相对路径为:favorite.htm,则该链接页面的绝对路径为:_________________________。
18.网络上常有的图像格式有_________和________________________。
19.Form标记的method属性可以取值为____________________和________________。
网络程序设计——ASP(第3版)课后习题答案(凯任整理)
第1章ASP程序设计概述习题11. 选择题(可多选)(1)静态网页的扩展名一般是:A.htm B .php C.asp D.jsp答案:A(2)ASP文件的扩展名是:A.htmB. txtC. docD. asp答案:D(3)当前的Web程序开发中通常采用什么模式?A. C/SB. B/SC. B/BD. C/C答案:B解释:C/S是客户机(client)/服务器(server),B/S是浏览器(browser)/服务器。
C/S一般要求用户有特定的客户端。
比如QQ就是C/S模式,你的桌面上的QQ就是腾讯公司的特定的客户端,而服务器就是腾讯的服务器。
而B/S模式则不需要特定的客户端,只要有普通浏览器,就可以访问到服务器了,Web页就是B/S 模式。
(4)小王正在家里通过拨号上网访问搜狐主页,此时,他自己的计算机是:A. 客户端B. 既是服务器端又是客户端C. 服务器端D. 既不是服务器端也不是客户端答案:A(5)小王正在访问自己计算机上的网页,此时,他自己的计算机是:A. 客户端B. 既是服务器端又是客户端C. 服务器端D. 既不是服务器端也不是客户端答案:B(6)ASP脚本代码是在哪里执行的?A. 客户端B. 第一次在客户端,以后在服务器端C. 服务器端D. 第一次在服务器端,以后在客户端答案:C解释:ASP脚本代码是在服务器端运行的,服务器将其解释执行为标准的HTML 代码,然后发送到客户端。
(7)在以下URL中,从形式上看正确的是:A. /history/1998/intro.aspB. /news/1.jpgC. ftp:// /history/1998/intro.aspD. ftp:///news/1.jpg答案:A B C D解释:从形式上看,都是正确的。
(8)如果在chapter1下建立了一个子文件夹images,并且在其中放置了一个图片文件1.jpg,那么以下URL正确的是:A. http://localhost/asptemp/chapter1/images/1.jpgB. http://127.0.0.1/asptemp/chapter1/images/1.jpgC. http://localhost/inetpub/wwwroot/asptemp/chapter1/images/1.jpgD. http://127.0.0.1/inetpub/wwwroot/asptemp/chapter1/images/1.jpg答案:A B(9)对于1.5.5节建立的1-2.asp,以下浏览方式正确的是:A. http://localhost/temp/1-2.aspB. http://127.0.0.1/temp/1-2.aspC. http://localhost/asptemp/chapter1/temp/1-2.aspD. http://127.0.0.1/asptemp/chapter1/temp/1-2.asp答案:A B C D解释:AB两种方式利用了建立的虚拟目录,CD实际上没有用到这个虚拟目录,此时和1-1.asp没有什么区别。
网络程序设计复习题
网络程序设计补考复习题一、单选题(每小题5分,共计100分。
)1.Java语言不具备的特点是( D )。
A.自动垃圾回收机制B.解释性C.平台无关性D.面向过程2.下面的标识符( C )是不正确的。
A._xyB.$xh3C.forD.xy_23.下面数组的声明和创建哪一项是正确的( A )。
A.String [][]a=new String[4][4];B.String [][]a=new String[][4];C.String [4][4]a=new String[][];D.String [][]a=new String[][];4.下面不能放在一起修饰其后面内容的修饰符组合是( C )。
A.public static方法B.public abstract 方法C.abstract f inal类D.static final常量标识符5.如果执行下面的语句:java Example cat,那么main()方法的参数arg[0]的值是( A )。
A.catB. javaC. ExampleD. c6.加载包p1中所有类的语句是( A )。
A. import p1.*;B.import p1;C. package p1.*;D.package p1;7.在if(表达式) 语句中,表达式的值应该是( C )。
A.任意整数值B.字符串C.布尔逻辑值D.非零值8.构造函数何时被调用( B )。
A.类定义时B.创建对象时C.调用对象方法时D.使用对象的变量时9.下列不属于容器的是(B )。
A.WindowB.TextF ieldC.PanelD.ScrollPane10.下列关于方法重载的说法正确的是( B )。
A.构造函数不允许重载B.重载的方法可以通过参数的个数或参数的类型来区分C.重载的方法可以通过方法的返回值来区分D.方法的重载和覆盖没有区别11.以下对Java语言的描述不正确的是( A )。
尚俊杰_网络程序设计——ASP(第3版)课后习题答案
目录第1章ASP程序设计概述 ................................................................ 错误!未定义书签。
习题1 ............................................................................................... 错误!未定义书签。
第2章HTML基础知识.................................................................... 错误!未定义书签。
习题2 ............................................................................................... 错误!未定义书签。
第3章VBScript基础知识 ................................................................ 错误!未定义书签。
习题3 ............................................................................................. 错误!未定义书签。
第4章Request和Response对象 ....................................................... 错误!未定义书签。
习题4 ............................................................................................... 错误!未定义书签。
第5章Session和Application对象..................................................... 错误!未定义书签。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.TCP/UDP在传输层;IP在网络层;MAC在数据链路层2.NAT的实现方式有三种,即静态转换、动态转换和端口多路复用3.端口号是16位的,范围在0~655354.在套接字通信中,常用套接字类型包括三类:流式套接字、数据报套接字和原始套接字①流式套接字(其类型字段的值是SOCK_STREAM): 提供面向连接的、可靠的字节流服务,应用程序所访问的传输层协议是TCP协议。
②数据报式套接字(其类型字段的值是SOCK_DGRAM): 提供无连接的,不可靠的数据报服务,应用程序所访问的传输层协议是UDP协议。
③原始套接字(其类型字段的值是SOCK_RAW): 允许应用程序直接对较低层的协议,如IP、ICMP进行访问。
5.有状态服务器定义:保存状态信息的服务器优势:减少客户和服务器交换报文的大小;允许服务器快速相应请求无状态服务器定义:不保存任何状态信息的服务器优势:提高协议的可靠性6.并发服务器定义:在一个时刻只处理一个请求的服务器循环服务器定义:在一个时刻可以处理多个请求的服务器7.面向应用的网络编程方法(1)WinInet编程(2)基于WWW应用的网络编程(3)面向SOA的Web Service8.面向原始帧的网络编程方法(1)直接网卡编程技术(2)基于Packet Driver的网络编程方法(3)基于NDIS的网络编程(4)WinPcap编程9.UDP是无连接的;TCP是面向连接的意义:①决定了客户和服务器交互所采用的算法;②决定了下层系统所提供的可靠性等级;面向连接的服务器优点:易于编程缺点:资源消耗问题无连接的服务器优点:无资源消耗问题缺点:编程复杂10.bind和listen函数是非阻塞的11.B/S模型B/S(Browse/Server)模型也叫B/S模式,它是一种基于Web的通信模型,使用HTTP通信。
B/S是一种特殊的C/S模型,特殊之处就在于这种模型的客户端一般是某种流行的浏览器,例如,微软的Internet Explorer。
优点:单台计算机可以访问任何一个Web服务器,不需要针对不同的服务器分别提供专用的客户端软件。
12.客户/服务器模型优点:(1)结构简单(2)支持分布式、并发环境(3)服务器集中管理资源,有利于权限控制和系统安全(4)可扩展性好缺点:(1)缺乏有效的安全性(2)客户负荷过重(3)服务器工作效率低(4)容易造成网络阻塞13.浏览器/服务器模型优点:(1)具有分布性特点,可以随时随地进行查询、浏览等业务处理(2)业务扩展简单方便,通过增加网页即可增加服务器功能(3)维护简单方便(4)开发简单,共享性强缺点:(1)操作时以鼠标为最基本的操作方式,无法满足快速操作的要求(2)页面动态刷新,响应速度明显降低(3)功能弱化,难以实现传统模式下的特殊功能要求14.字节顺序:大端顺序和小端顺序15.Linux中提供的基本I/O功能16.会聚点问题的解决方案1)要求下层通信协议在请求报文到达后自动创建运行程序——底层通讯程序太复杂!2)要求在任何一对进行通信的应用进程中,有一方必须在启动执行后(无限期)等待对方与其联系。
——客户-服务器模型的解决方案17.客户端通信过程:①socket初始化;②创建套接字,指定使用TCP(可靠的传输服务)进行通信;③指定服务器地址和通信端口;④向服务器发送连接请求;⑤进行数据传输;⑥关闭套接字;⑦结束对windows sockets dll的使用。
18.服务器通信过程:①socket初始化;②创建套接字,指定使用TCP(可靠的传输服务)进行通信;③指定本地地址和通信端口;④等待客户端的连接请求;⑤进行数据传输;⑥关闭套接字;⑦结束对windows sockets dll的使用。
19.接收函数的调用结果有很多种完整接收流数据int iResult, recvbuflen;char recvbuf [MSGSZ];do {iResult = recv(ConnectSocket, recvbuf, recvbuflen, 0);if ( iResult > 0 )printf("Bytes received: %d\n", iResult);else {if ( iResult == 0 )printf("Connection closed\n");elseprintf("recv failed with error: %d\n", WSAGetLastError());}} while( iResult > 0 );20.接收定长数据int recvn(SOCKET s, char * recvbuf, unsigned int fixedlen){int iResult; //存储单次recv操作的返回值int cnt; //用于统计相对于固定长度,剩余多少字节尚未接收cnt = fixedlen;while ( cnt > 0 ) {iResult = recv(s, recvbuf, cnt, 0);if ( iResult < 0 ){//数据接收出现错误,返回失败printf("接收发生错误: %d\n", WSAGetLastError());return -1;}if ( iResult == 0 ){//对方关闭连接,返回已接收到的小于fixedlen的字节数printf("连接关闭\n");return fixedlen - cnt;}//printf("接收到的字节数: %d\n", iResult);//接收缓存指针向后移动recvbuf +=iResult;//更新cnt值cnt -=iResult;}return fixedlen;}21.接收变长数据int recvvl(SOCKET s, char * recvbuf, unsigned int recvbuflen){int iResult;//存储单次recv操作的返回值unsigned int reclen; //用于存储报文头部存储的长度信息 //获取接收报文长度信息iResult = recvn(s, ( char * )&reclen, sizeof( unsigned int ));if ( iResult !=sizeof ( unsigned int ){//如果长度字段在接收时没有返回一个整型数据就返回(连接关闭)或-1(发生错误)if ( iResult == -1 ){printf("接收发生错误: %d\n", WSAGetLastError());return -1;}else{printf("连接关闭\n");return 0;}}//转换网络字节顺序到主机字节顺序reclen = ntohl( reclen );if ( reclen > recvbuflen ){//如果recvbuf没有足够的空间存储变长消息,则接收该消息并丢弃,返回错误while ( reclen > 0){iResult = recvn( s, recvbuf, recvbuflen );if ( iResult != recvbuflen ){//如果变长消息在接收时没有返回足够的数据就返回(连接关闭)或-1(发生错误)if ( iResult == -1 ){printf("收发生错误:%d\n", WSAGetLastError());return -1;}else {printf("连接关闭\n");return 0;}}reclen -= recvbuflen;//处理最后一段数据长度if ( reclen < recvbuflen )recvbuflen = reclen;}printf("可变长度的消息超出预分配的接收缓存\r\n");return -1;}//接收可变长消息iResult = recvn( s, recvbuf, reclen );if ( iResult != reclen ){//如果消息在接收时没有返回足够的数据就返回(连接关闭)或-1(发生错误)if ( iResult == -1 ) {printf("接收发生错误: %d\n", WSAGetLastError());return -1;}else {printf("连接关闭\n");return 0;}}return iResult;}简答题2、阐述程序、套接字、端口和协议之间的关系程序和套接字的关系:一个程序可以同时使用多个套接字,不同套接字完成不同的传输任务。
多个应用程序可以同时使用同一个套接字,不过这种情况并不常见。
套接字和端口的关系:每个套接字都有一个关联的本地TCP或UDP端口,它用于把传入的分组指引到应该接收它们的应用程序。
一个端口上可能关联多个套接字,流式套接字的服务器上可能同时有监听套接字和连接套接字,它们都与一个TCP的端口号相关联;一个套接字一般只会关联一个唯一的本地端口号。
端口和协议的关系:TCP和UDP的端口号是独立使用的。
3、在基于流式套接字的网络应用程序设计中,假设客户端以8字节-12字节-8字节-12字节的顺序交替发送数据给服务器,请思考,服务器的接收操作每次能够接收到多少字节的数据?为什么?服务器接收操作每次能够接收到的数据长度是不确定的,这是因为TCP传送数据的形态是没有间隔的字节流,数据接收仅与接收调用的时间和当前主机内核缓存中尚未提交应用程序的数据有关,与发送端发送多少次和TCP如何传送没有直接的关系,我们不能准确地预测一个特定的接收操作到底返回多少字节。
4.在服务器和客户的通信过程中,服务器是如何处理多个客户服务请求的呢?1)如果是循环服务器,则服务器在与一个客户建立连接后,其他客户只能等待;当一个客户服务完之后,服务器才会接收另一个客户的服务请求;即循环服务器的通信流程中,蓝色的3个步骤是循环进行的;2)如果是并发服务器,则当服务器与一个客户进行通信的过程中,可以同时接收其他客户的服务请求,并且服务器要为每一个客户创建一个从进程,在从进程中用新创建的套接字与客户交互;即并发服务器的通信流程中蓝色的3个步骤,在与多个客户通信时,是并发执行的;5.为什么客户端没有bind,而服务器端需要?客户端是主动连接,而服务器是等待连接,因此服务器必须需要绑定IP地址和端口号,而客户端不需要。