网络编程技术试题.docx
- 文档编号:9736075
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:61
- 大小:497.88KB
网络编程技术试题.docx
《网络编程技术试题.docx》由会员分享,可在线阅读,更多相关《网络编程技术试题.docx(61页珍藏版)》请在冰豆网上搜索。
网络编程技术试题
第一章--------网络基础知识
1.1进程是指运行中的程序,进程的任务就是执行程序中的代码
1.2网络中每台机器称为节点,网络协议(Protocol)是计算机能够通信的软件基础。
协议是程序间通信的规约,定义了通信语言的语法、语义和时序。
1.3OSI的概念--开放系统互连参考模型,是由ISO(国际标准化组织)定义的。
OSI模型的目的1规范不同系统的互联标准2提供不同厂商间的接口标准.
OSI把网络按照层次分为七层,由下到上分别为物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
OSI参考模型——层功能
1.4TCP/IP协议族是一个四层协议系统-应用层传输层Internet层网络接口层
TCP/IP协议族是分布在四层结构的各层上的协议的集合。
TCP/IP参考模型——与OSI的映射--应用表示会话层对应应用层;传输层对应传输层;网络层对应Internet层;数据链路物理层对应网络接口层。
1.5IP协议是网络层协议,负责管理数据报的点到点传输。
IP协议是不可靠、无连接的数据报传送协议
IPv4为互联网上每台主机分配一个32位二进制整数地址(网络层地址),该地址被称为Internet地址或IP地址
IP地址分类-------私有地址公共地址
常用的传输层协议包括:
TCP/UDP协议
TCP协议提供一种面向连接的、可靠的、面向数据流的数据传输服务。
它将源主机发出的字节流无差错的发送给互联网上的目标主机。
UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合
TCP和UDP都用端口来标识进程,允许存在取值相同的TCP端口与UDP端口
1.6客户机/服务器-模型--该模型将软件分为两类:
客户机程序和服务器程序
TCP客户/服务器程序流程如下
UDP客户/服务器程序流程如下:
应用层协议;HTTP----超文本传输协议,提供浏览网页服务
Telnet-----远程登陆协议,提供远程管理服务
FTP-----文件传输协议,提供互联网文件资源共享服务
SMTP-----简单邮件传输协议,提供互联网电子邮件服务
POP3-----邮局协议3,提供互联网电子邮件服务
TFTP-----简单文件传输协议,提供简单的文件传输服务
第二章--------Java及其输入输出机制
2.1Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME)的总称。
通用性、高效性、平台移植性和安全性。
Java是纯面向对象语言,程序设计的单元是类,程序运行的单元为对象
C++是混合型语言,既可以是面向对象的,也可以是面向过程的
其它语法区别
定义常量:
constfloatPI=3.14finalstaticfloatPI=3.14;
Java去除了C++指针、析构函数等特性
Java对象都是在堆上的,C++有栈对象也有堆对象
Java中boolean类型和整型是不能进行类型转换的if(a=0){…..}else{…..}
Java中只支持单继承,C++支持多继承classAextendsB{}
Java抽象方法使用abstract,C++使用virtual
Java对于完全抽象的类使用interface(接口)表示
2.2Java的输入输出机制
Java的输入输出操作采用流的机制,数据流是指所有的数据通信通道
2.2.1流的概述
大部分网络编程实质上处理输入和输出——将字节从一个系统传输到另一系统中
网络上读写信息v.s.读写文件-------在逻辑上(从Java的角度)没什么区别——Java的I/O机制建立在流的基础上。
不同的流用于读写特定资源,但它们都有基本的方法用于读写操作
Java中,一个可以读取字节序列的对象称为输入流,一个可以向其中写入字节序列的对象称之为输出流。
流是同步的,即:
程序向流进行读写时,必须等待数据准备完毕后方法才会结束返回
Java中流的分类---原始流过滤器流
2.2.2输出流
Java基础的输出流类为:
-----publicabstractclassOutputStream
基本方法包括(所有方法都抛出IOException):
publicabstractvoidwrite(intb)publicvoidwrite(byte[]data)
publicvoidwrite(byte[]data,intoffset,intlength)
publicvoidflush()publicvoidclose()
OutputStream子类实现这些方法将数据写到特定媒体
FileOutputStreamTelnetOutputStreamByteArrayOutputStream
2.2.3输入流
Java基础的输入流类为:
------publicabstractclassInputStream
基本方法包括(所有方法都抛出IOException):
publicabstractintread()publicvoidread(byte[]data)
publicvoidread(byte[]data,intoffset,intlength)
publicintavailable()publicvoidskip(longn)publicvoidclose()
InputStream子类实现这些方法将数据写到特定媒体中
FileInputStream、TelnetInputStream、ByteArrayInputStream。
FileI/O
文件对象的建立;Filefp=newFile(“tempfile.txt”);对文件操作要定义文件流;FileInputStream类用来打开一个输入文件;FileOutputStream类用来打开一个输出文件;
文件流的建立FileInputStreamin=newFileInputStream(fp);
FileOutputStreamout=newFileOutputStream(fp);
输入流的参数是用于输入的文件名;输出流的参数是用于输出的文件名
importjava.io.*;
classfilestream
{publicstaticvoidmain(Stringargs[])
{try{
FileinFile=newFile(”file1.txt");
FileoutFile=newFile(”file2.txt");
FileInputStreamfis=newFileInputStream(inFile);
FileOutputStreamfos=newFileOutputStream(outFile);
intc;
while((c=fis.read())!
=-1)
fos.write(c);
fis.close();
fos.close();
}catch(FileNotFoundExceptione){
System.out.println("FileStreamsTest:
"+e);
}catch(IOExceptione){
System.err.println("FileStreamsTest:
"+e);}}}
2.2.3输入流
标记和重置(Marking&Resetting):
用于在输入流中回退读取已经读过的数据
publicvoidmark(intreadAheadLimit)
publicvoidreset()
publicbooleanmarkSupported()
2.2.4过滤器流
Java提供过滤器(filter)类将这些字节转化为其它格式数据
过滤器包括两种:
过滤器流和读写器(readers&writers),过滤器流依旧操作原始字节流,而读写器则操作文本。
过滤器流置于原始流或其它过滤器流上,读写器则置于原始流、过滤器流和其它读写器之上,过滤器流不能置于读写器上
过滤器输出流与OutputStream拥有相同的write、close和flush方法
过滤器输入流与InputStream拥有相同的read、close和available方法
过滤器流的链接:
通过构造函数进行链接
DataOutputStreamdout=newDataOutputStream(
newBufferedOutputStream(
newFileOutputStream(“data.txt”)));
缓冲流
BufferedOutputStream将写出的数据存储在缓冲区中,直到缓冲区满或者流被刷新;之后一次性将这些数据将数据写到底层输出流
BufferedInputStream读取数据时会先在缓冲区中获取数据,只有在缓冲区中数据用完时才从底层输入流读取数据
publicBufferedInputStream(InputStreamin);publicBufferedInputStream(InputStreamin,intbuffersize);publicBufferedOutputStream(OutputStreamout);publicBufferedOutputStream(OutputStreamin,intbuffersize);
打印流;
用于输出的流,System.out就PrintStream的一个实例
构造函数:
publicPrintStream(OutputStreamout)
publicPrintStream(OutputStreamout,booleanautoFlush)
PrintStream定义了9个重载的print和10个重载的;
println方法,这些方法将不同基类型的参数先转换为字符串再写入底层输出流
PrintStream的println方法应注意三个问题:
println输出时平台相关的,有的是换行,有的是回车,有的是换行/回车对
println按其运行平台制定默认的编码格式
PrintStream会“吃”掉所有的异常
数据流
DataOutputStream和DataInputStream类提供将Java基本类型和字符串写成二进制格式及从二进制格式读出为Java基本类型和字符串
writeBoolean、writeByte、writeShort……
readBoolean、readByte、readShort……
2.2.5读写器
java.io.Reader用于读取字符
java.io.Writer用于写字符
Reader和Writer默认使用Unicode字符
Reader子类包括:
InputStreamReader;FileReader;CharArrayReader;
Writer子类包括:
OutputStreamWriter;FileWriter;CharArrayWriter;
Writer常用方法:
protectedWriter()
protectedWriter(Objcetlock)
publicabstractvoidwrite(char[]text,intoffset,intlength)
publicvoidwrite(intc)
publicvoidwrite(char[]text)
publicvoidwrite(Strings)
publicvoidwriter(Strings,intoffset,intlength)
publicabstractvoidflush()
publicabstractvoidclose()
Writer子类,从Java程序中接收字符,根据指定的编码格式将字符转换为字节,并将其写入到一个输出流中
publicOutputStreamWriter(OutputStreamout,Stringencoding);
publicOutputStreamWriter(OutputStreamout);
Reader常用方法:
protectedReader()
protectedReader(Objcetlock)
publicabstractvoidread(char[]text,intoffset,intlength)
publicvoidread(intc)
publicvoidread(char[]text)
publicvoidskip(longn)
publicbooleanready()
PublicbooleanmarkSupported()
publicvoidmark(intreadAheadLimit)
publicvoidreset()
publicabstractvoidclose()
Reader子类,从底层输入流接收字节,根据指定的编码格式将字节转换为字符,并将其返回给使用者
publicInputStreamWriter(InputStreamin,Stringencoding);
publicInputStreamWriter(InputStreamin);
2.2.6输入输出方法
System类管理标准输入输出流和错误流
System.out:
把输出送到缺省的显示(通常是显示器)
System.in:
从标准输入获取输入(通常是键盘)
System.err:
把错误信息送到缺省的显示
每当main方法被执行时,就自动生成上述三个对象
publicclassReadHello{
publicstaticvoidmain(Stringargs[]){
charinchar;
System.out.println(“Enteracharacter:
”);
try{
inChar=(char)System.in.read();
Syste.out.println(““+inChar);
}catch(IOExceptione){
Sytem.out.println(“Errorreadingfromuser”);}}
}importjava.io.*;
classIOTest{
publicstaticsvoidmain(Stringargs[]){
try{bytebArray[]=newbyte[128];
System.out.println(“Entersomething:
”);
System.in.read(bArray);
System.out.print(“Youentered:
”);
System.out.println(bArray);
}catch(IOExceptionioe)
{System.out.println(ioe.toString());}}}
输入输出方法
为什么输入的是字符,输出是乱码?
原因:
System.out.println(bArray)输出的是数组的地址而不是字符
改进:
将字符数组变换成字符串
原来是:
System.out.println(bArray);
现在为:
Strings=newString(bArray,0);
System.out.println(s);
System.in是属于BufferedInputStream类型
System.out是属于PrintStream类型
System.err也是属于PrintStream类型
第三章网络地址
3.1InetAddress类
网络上每一个节点都需要一个IP地址进行标识
通过DNS也可以使用主机名标志一台主机
一台主机可以有多个名字
一个主机名也可以映射到多个IP地址
.InetAddress是Java用于对表示IP地址的类;既可以表示IPv4地址(Inet4Address)
也可以表示IPv6地址(Inet6Address)
InetAddress作为参数用于构造套接字类(Socket)
InetAddress类声明如下:
publicclassInetAddressextendsObject
implementsSerializable
InetAddress类中包含两个属性:
主机名(Stringhostname)和IP地址(byte[]address)
创建InetAddress对象
InetAddress类没有public类型的构造函数
InetAddress类定义了几个静态方法用于返回InetAddress对象(均抛出UnknownHostException):
publicstaticInetAddressgetLocalHost()
publicstaticInetAddressgetByName(StringhostName)
publicstaticInetAddress[]getAllByName(StringhostName)
publicstaticInetAddressgetByAddress(byte[]addr)
前三个方法会与本地DNS建立连接,获取InetAddress对象需要的信息
由于网络连接的系统开销很大,所以查询结果会进行缓存
getLocalHost方法:
获取本地主机的InetAddress对象(当查不到本地主机地址时,会抛出一个
UnknownHostException异常)
代码示例:
try{
InetAddressaddr=InetAddress.getLocalHost();
}catch(UnknownHostExceptione){
………}
当本地主机绑定多个IP地址时,该方法只返回第一个IP地址,若要返回本机的全部IP地址,需要使用getAllByName方法
getByName方法通过指定域名从DNS中得到相应的IP地址。
String类型参数hostname:
主机域名;主机名;主机IP地址(点分十进制字符串形式);
当本地主机绑定多个IP地址时,该方法只返回第一个IP地址,若要返回本机的全部IP地址,需要使用getAllByName方法
代码示例:
//返回域名为"www.javathinker.org"的IP地址
InetAddressaddr3=InetAddress.getByName("www.javathinker.org");
//返回代表“buffalo"的IP地址
InetAddressaddr2=InetAddress.getByName(“buffalo");
//返回代表"222.34.5.7"的IP地址
InetAddressaddr2=InetAddress.getByName("222.34.5.7");
getAllByName方法可以获得DNS上域名对应的所有IP地址
代码示例:
InetAddressaddresses[]=InetAddress.
getAllByName(“”);
getByAddress方法
getByAddress方法通过byte数组形式的IP地址创建InetAddress对象
两种重载形式
publicstaticInetAddressgetByAddress(byte[]addr)
publicstaticInetAddressgetByAddress(Stringhost,byte[]addr)
第二个重载方法中的host参数与“主机名”是不同的概念,它只表示IP地址的一个别名,与DNS中的域名及主机名可以完全不同,这两个方法并不访问DNS服务器
InetAddress类的查询方法
InetAddress类中其它的查询函数:
查找IP地址(不访问DNS服务器)publicbyte[]getAddress();
publicStringgetHostAddress()
查找域名publicStringgetHostName();publicStringgetCanonicalHostName()
将InetAddress对象转换为字符串表示;publicStringtoString()
3.2Inet4Address和Inet6Address
Inet4Address:
InetAddress的子类,表示IPv4地址------publicfinalclassInet4AddressextendsInetAddress
Inet6Address:
InetAddress的子类,表示IPv6地址--------publicfinalclassInet6AddressextendsInetAddress
3.3SocketAddress类
SocketAddress类用于表示网络连接的一个端点地址。
SocketAddress是一个空类,只有一个默认构造方法;publicSocketAddress(){}
SocketAddress的子类可以根据具体协议提供通信端点的细节
目前只支持TCP/IP协议的SocketAddress—InetSocketAddress
SocketAddress的目的是方便的存储Socket相关地址信息,在TCP/IP类型Socket中,包括IP地址和端口号;InetAddressia;intport
构造函数InetSocketAddress(InetAddress addr,int port)
InetSocketAddress(String hostname,int port)
InetSocketAddress(int port)
查询方法InetAddressgetAddress():
获取IP地址
StringgetHostName():
获取域名或主机名
intgetPort():
获取端口号
第四章Socket和ServerSocket
网络编程基本流程—TCP协议
TCP客户/服务器程序流程如下:
4.1构造Socket对象
套接字(socket)表示两台主机间的连接,可以发送请求,也可以接收请求。
可以执行以下七种操作:
连接远程主机;发送数据;接收数据;关闭连接;绑定到一个端口;
监听到来的连接请求;在绑定的端口上接受远程主机的连接;
Java
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 技术 试题