互联网程序设计第一章简答题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章:简答题
1.问:什么是套接字?套接字的类型有哪些?区别在哪?
答:套接字是操作系统开放给程序员的网络编程接口,是介于应用层与传输层之间的一种软件抽象层,是属于操作系统级别的API。
套接字类型:流式套接字;数据报套接字;原始套接字。
区别:
(1)流式套接字提供连接服务,进行双向可靠的数据传输,它调用传输层TCP模块,保证数据无差错、无重复地发送并按顺序接收,数据被看做成是字节流,无长度限制。
(2)数据报套接字提供无连接服务,调用传输层UDP模块。报文以独立包的形式发送,不提供无差错控制,数据可能丢失或重复,顺序也可能混乱。
(3)原始套接字允许应用进程越过传输层,对较低层次协议模块直接调用的访问,可以接收发向本机的ICMP、IGMP报文,或者接收TCP模块、IP模块不能处理的数据报,或者访问设备配置信息等。
2.问:TCP/IP四层模型中各层的主要功能是什么?
答:TCP/IP网络模型从上至下由应用层、传输层、网络层、链路层组成。
应用层:应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP 实现都会提供下面这些通用的应用程序:Telnet远程登录、SMTP(简单邮件传输协议)、FTP(文件传输协议)、HTTP(超文本传输协议)等。
传输层:传输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
网络层:网络层处理分组在网络中的活动,例如分组的选路。在TCP/IP 协议族中,网络层协议包括IP协议(网际协议)、ICMP协议(网际控制报文协议)和IGMP协议(网际组管理协议)。
链路层:链路层有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
3.问:Java Socket API有哪些?熟悉每个类的定义与用法。
答:(1)socket():
函数原型:int socket(int domain,int type, int protocol);
函数作用:用于根据指定的地址族、数据类型和协议来分配一个套接口的描述字及其所用的资源的函数
(2)inet_ntoa():
函数原型:char *inet_ntoa(struct in_addr in);
函数作用:将IP地址,转换为点分十进制的字符串格式;
(3)inet_pton():
函数原型:int inet_pton(int af, const char *src, void *dst);
函数作用:将点分十进制的字符串格式的IP地址,转换成整数格式。
(4)inet_addr():
函数原型:in_addr_t inet_addr(const char *cp);
函数作用:inet_addr()的功能是将一个点分十进制的IP转换成一个长
整数型数(u_long类型)。
(5)select 函数以及 select相关函数:
函数原型:int select(int maxfdp, fd_set* readfds, fd_set* writefds,
fd_set* errorfds, struct timeval* timeout);
函数作用:它能够监视我们需要监视的文件描述符的变化情况——读写
或是异常。
4.问:描述创建Java线程的基本方法。
答:有两种基本方法:
(1)从Runnable接口入手,编写实现Runnable接口的类。Runnable接口仅包含一个run()方法,创建一个新的类实现Runnable接口。或者创建一个Runnable对象,将Runnable对象传递给Thread类的构造函数。
(2)从Thread类入手,编写Thread的子类。Thread类自身已实现了Runnable 接口,但它的run()方法没有定义任何代码,所以子类必须重写run()方法。
5.问:客户机与服务器是如何通信的?分别就TCP与UDP两种协议,描述其通信模型。
答:TCP:
UDP:
6.问:以TCP协议为例,描述客户机编程模板与服务器编程模板。
答:
客户机编程模板:
//1.创建客户机套接字
Socket clientSocket = new Socket();
//2.连接服务器
clientSocket.connect(remoteAddr);
//3.与服务器会话
BufferedReader in = new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream())); BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(
clientSocket.getOutputStream()));
String sendStr="有朋自远方来";
out.write(sendStr); //向服务器发送字符串
out.newLine();
out.flush();
String recvStr=in.readLine(); //从服务器接收字符串
//4.关闭套接字和流
if (in != null) in.close();
if (out != null) out.close();
if (clientSocket != null) clientSocket.close();
服务器编程模板:
//1.启动服务器
ServerSocket listenSocket = new ServerSocket();
listenSocket.bind(serverAddr);
//2.处理连接
Socket clientSocket = listenSocket.accept();
//3.与客户机会话
BufferedReader in = new BufferedReader(
new InputStreamReader(
clientSocket.getInputStream())); BufferedWriter out = new BufferedWriter(
new OutputStreamWriter(
clientSocket.getOutputStream()));
String recvStr=in.readLine(); //从客户机接收字符串
out.write(recvStr); //向客户机回送字符串
out.newLine();
out.flush();
//4.关闭套接字和流
if (in != null) in.close();