网络编程技术试题.docx

上传人:b****7 文档编号:9736075 上传时间:2023-02-06 格式:DOCX 页数:61 大小:497.88KB
下载 相关 举报
网络编程技术试题.docx_第1页
第1页 / 共61页
网络编程技术试题.docx_第2页
第2页 / 共61页
网络编程技术试题.docx_第3页
第3页 / 共61页
网络编程技术试题.docx_第4页
第4页 / 共61页
网络编程技术试题.docx_第5页
第5页 / 共61页
点击查看更多>>
下载资源
资源描述

网络编程技术试题.docx

《网络编程技术试题.docx》由会员分享,可在线阅读,更多相关《网络编程技术试题.docx(61页珍藏版)》请在冰豆网上搜索。

网络编程技术试题.docx

网络编程技术试题

第一章--------网络基础知识

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1