您的位置:首页 > 理论基础 > 计算机网络

网络编程

2015-06-11 22:49 435 查看
第十章 网络编程

一.网络基础
所谓计算机网络,是指把分布在不同地理区域的计算机用通信线路互联起来的一个具有强大功能的网络系统。
通俗的说,计算机网络就是通过电缆、电话线、或无线通讯设施等互联的计算机的集合
网络中每台机器称为节点(node)。大多数节点是计算机,此外,打印机、路由器、网桥、网关和哑终端等也是节点。
1.计算机联网可实现
a.使用远程资源
b.共享信息,程序和数据
c.分布处理
2.网络类型:
a.按照网络规模和范围可以简单的划分为:
局域网(LAN) 都市网(MAN) 广域网(WAN)
b.按照网络拓扑结构可以分为:
网络拓扑结构:指网络中各个节点相互连接的方式和形式;
星型网络 总线网络 环线网络 树形网络 星型环形网络
d.按照传输介质来划分:
介质:指微波,红外线,和激光等这些能在发送方和接收方之间有一条视线通道;
双绞线 同轴电缆 光导纤维 视线介质等等; 
3.网络工作模式
a.专用服务器结构(Server-Based) 
又称:工作站/文件服务器结构,由若干台微型机工作站与另一台或多台文件服务器通过
通信线连接起来组成工作站存取服务器文件,共享存储设备;
b.客户机/服务器模式(Client/Server,简称C/S结构)
其中一台或几台较大的计算机集成进行共享数据库的管理和存储,称为:服务器;
c.对等式网络:(Peer-to-Peer) 
没有固定服务器,各个段点之间的关系是平等的。并且他们之间的交互式直接的联系

二.Intent网络的形成和发展
1.第一阶段(1969~1983):组成互联网(internet)
2.第二阶段(1983~1994):用于教育和科研领域的国家科学基金网NSFNet(National Science Foundation Net)形成
3.第三阶段(1994~现在):Internet的商业化运作。Internet的商业化运作

三.网络通信结构
1.为了使两个结点之间能进行对话,必须在它们之间建立通信工具(即接口),使彼此之间 能进行信息交换。
2.接口包括两个部分;
a.硬件装置;实现节点之间信息传送;
b.软件装置:规定双方进行通信的约定协议;
3.OSI分层思想(RM)
1978年,国际标准化组织(ISO)为网络通信机制制定了一个标准模式;
4.OSI体系结构;
七个层次;从低到高
物理层 数据链路层 网络层 传输层 会话层 表示层 应用层;
5.之所以要将网络分层,主要基于以下考虑:
将网络简化;
模块化的设计网络。
6.各个层详解
a.物理层:底层,他是网络硬件设备之间的接口
b.数据链路层:在网络实体之间建立,维持和释放数据链路的连接,以及传输数据链路服务数据单元;
c.网络层;通过网络连接交换网络服务数据单元;
d.会话层;提供两个进程之间的连接管理功能;
e.表示层:处理被传输数据的表示问题;完成数据转换,格式化和文本压缩;
f.应用层;是直接面对用户的一层,提供OSI用户服务;

四.网络通信协议
网络通信协议:为了进行网络通信,通信双方必须遵守通信协议。
协议的关键成分:
语法(Syntax):包括数据格式、数据编码以及信号等。
语义(Semantics):包括用于协调和差错处理的控制信息。
定时(Timing):包括传输速率和数据排序等。
1.TCP协议
TCP:TCP 协议是一种面向连接的、可靠的协议。
它将源主机发出的字节流无差错的发送给互联网上的目标主机。
工作职责:
a.在发送端,TCP 协议负责
把上层传过来的数据分成报文并传递给下层;
b.在接收端,TCP 协议负责
把收到的报文进行重组后交给上层;
TCP:协议会让两台计算机建立一个连接,发送和接受数据以及终止连接;
传输控制协议TCP协议:利用重发技术和拥塞控制机制;向应用程序提供可靠的通信连接;
TCP协议:重发一切没有接受到的数据;
注意:TCP 协议还要将处理端到接受端的流量控制,
以避免接收速度缓慢的接收方没有足够的缓冲区来接收发送方发送的大量数据。
2.IP协议
IP:IP是一个无连接、不可靠的协议。(IP协议不重发已丢失的数据包或则检测受损害的数据;)
在向另一台主机传输数据之前,它不交换控制信息,数据包只是传送到目的主机,并且假设能够被正确地处理。
a.IP 是面向包的协议,即数据被分成若干小数据包,然后分别传输它们。
b.IP 网络上的主机只能直接向本地网上的其他主机(也就是具有相同IP 网址的主机)发送数据包。
3.TCP/IP协议
IP协议:只是保证计算机能发送和接受分组数据;
TCP协议:提供一个可靠,可控制的信息流传输服务;
安装和使用TCP和IP协议,统称为:TCP/IP协议;
优点:TCP/Ip协议:使Intent尽可能成为一个分散,无序的网络。最早出现于UNIX系统中;
a.TCP/IP的4层模型
(1)应用层 
(2)传输层
(3)网络层
(4)链路层
b.数据的封装和拆封
封装:定义描述源信息和数据包的部分是信息的报头协议;
信息在不同的层之间传递时,都会在每一层中新建构建一次;
TCP对应OSI模型的传输层。
IP对象OSI模型的网络层

4.IP地址

从A机器发送到B机器的数据看成是信的内容,那么,
机器在发送数据包的时候也必须知道对方的地址,在网络中,它是通过IP地址来标识的。
a.IP地址是数字型的,由32位(bit)二进制表示,将它分割成由4段(segment),
每段由8位的二进制数组成,每段(8位)之间用圆点(.)隔开。
用点分开的各段可以表示的数值范围是0~255。
b.IP地址由网络标识(Network ID)和主机标识(Host ID)组成,它们都包含在32位二进制数据中。
主机标识又称为节点标识(Node ID)。
(1)A类地址:用于大型网络。
A类地址中的最前面一段用来表示“网络ID”,且最前面一段的8位二进制数中的第一位必须是“0”。
其余3段表示“节点ID”。
A类地址的表示范围为:0.0.0.0~126.255.255.255
(2)B类地址:用于中型网络。前两段用来表示“网络ID”,且第一段的8位二进制数中的前二位必须是“10”。
后两段用来表示“节点ID”。
B类地址的表示范围为:128.0.0.0~191.255.255.255
(3)C类地址:用于小型网络,如局域网。在C类地址中,前三段表示“网络ID”。
C类地址的表示范围为:192.0.0.0~223.255.255.255。

5.子网掩码
a.子网掩码也是一个32位的地址。它用于屏蔽一部分IP地址,
由此而区分网络标识和主机标识:网络地址部分的对应位设置为1,主机地址部分的对应位设置为 0。
b.子网掩码
A类网络掩码:255.0.0.0
B类网络掩码:255.255.0.0
C类网络掩码:255.255.255.0

6.获取Ip地址;
a.InetAddress在java.net包中,它没有任何的构造器,
可以通过它自身的静态方法来得到InetAddress类的实例;
b.方法:
static InetAddress getByName(String hostname):返回指定主机名称hostname对应的IP地址,如果参数为null,则返回本地机器的地址;
static InetAddress[] getAllByName(String hostname):返回指定主机名称hostname对应的IP地址数组,这种情况适用于主机有几个网卡的情况;
static InetAddress getLocalHost():返回本地机器的IP地址;

六.Socket
1.套接字:socket是执行基于网络的另一个引用程序的通信链的引用,
2.应用程序通过“套接字”向网络发送请求或则应答网络请求;
3.Socket大致位于OSI参考模式的会话层;
4.socket是计算机进行数据交换时的一个接口;

七.java Socket编程
Socket:两个java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端,称为socket
ServerSocket专门用于建立服务器端的Socket应用
1.ServerSocket构造器;
a.ServerSocket() :用于建立一个socket,为绑定接口; 
b.ServerSocket(int port) :创建绑定到特定口的服务器socket。 
c.ServerSocket(int port, int backlog) :利用指定的 backlog 创建服务器socket并将其绑定到指定的本地端口号。 
d.ServerSocket(int port, int backlog, InetAddress bindAddr) :使用指定的端口、侦听 backlog 和要绑定到的本地 IP 地址创建服务器。 
2.方法:
a.accept() :侦听并接受到此套接字的连接。
用于接受一个客户端的连接,如果客户端连接到serverSocket所创建的侦听接口,就返回一个socket实例,不然一直等待;
b.close();关闭socket连接
3.socket类
构造器
a.Socket();创建一个没有连接的socket;
b.Socket(InetAddress address, int port) 创建一个指定主机IPaddress端口上的socket连接;
c.Socket(String host, int port) :创建一个指定定主机名称host,端口port上的端口连接;
4.socket用法;
getInputStream() :返回此套接字的输入流。
getOutputStream() : 返回此套接字的输出流。
socket通过getInputStream和getOutputStream读取数据;
“localhost”表示本机地址://192.168.1.108

八.Java URL类
1.URL(Uniform Resource Locator)-统一资源定位器,表示Intent上某个资源的地址;
URL:组成:协议名(protocol)和资源名(resourceName);
protocol:指明获取资源所使用的传输协议
resourceName:资源的完整地址(包括主机名、端口号、文件名或文件内部的一个引用

http://www.sun.com/  协议名://主机名 http://www.anjoyo.com/home/welcome.html  协议名://主机名+文件名 http://www.anjoyo.com:80/Gamelan/network.html#BOTTOM  协议名://主机名+端口号+文件名+内部引用
2.Java中URL类
构造方法:
a.构造方法摘要
(1)URL(String spec) :建立表示指定字符串的URL对象;
如:URL ul= new URL("http://www.baidu.com/");
(2)URL(URL context, String spec) :建立表示指定上下文以及指定的路径的URL
如:URL ul= new URL("http://www.baidu.com/","welcome.html");
(3)URL(String protocol, String host, String file) :
根据指定的指定协议,主机以及文件所表示的URL对象;
如:URL ul= new URL("http","www.anjoyo.com","home/welcome.html");
(4)URL(String protocol, String host, int port, String file) :
建立指定协议,主机,端口以及文件所表示的URL
如:URL ul= new URL("http","www.anjoyo.com",80,"home/welcome.html");
(5)URL(String protocol, String host, int port, String file, URLStreamHandler handler) 
建立指定协议,主机,端口以及文件所表示的URL和内部引用;
如:URL ul= new URL("http","www.anjoyo.com",80,"home/welcome.html","#BOTTOM");

b.常用方法: http://baike.baidu.com/view/12770393.htm (1)getFile():返回这个URL所指向的文件名
(2)getHost():返回这个URl所指向的主机名;
(3)getPath():返回这个URL的路径部分;
(4)getPort():返回这个URL的端口;
(5)getProtocol():返回这个URL所使用的端口;
(6)URLConnection openConnection() :返回一个通过这个URL指定的链接到远程主机的URLConnection对象;
(7)InputStream openStream() :打开一个指向这个URL的链接并且从连接返回一个InputString用于读取;

d.StringTokenizer
a.StringTokenizer字符串标记类,
它的作用是用来对指定的字符串进行语法分析(parse)。
b.将一个指定的字符串按照指定的分割字符分割成不同的部分,分割后得到各部分字符串称为字符标记(token)

构造方法
(1)StringTokenizer(String str) 
给指定的字符串str建立一个字符串标记;
(2)StringTokenizer(String str, String delim) 
给指定的字符串Str建立一个字符串标记str将按照指定的delim中的字符解析;

(3)StringTokenizer(String str, String delim, boolean returnDelims)
给指定的字符串str建立一个字符串标记;
str - 要解析的字符串,delim - 分隔符,returnDelims - 指示是否将分隔符作为标记返回的标志。 
e.方法:
(1)int countTokens():使用当前的分隔符还可以得到字符标记(tokens)数目;
(2)boolean hasMoreElements() :是否还有可用的字符标记;
(3)String nextToken():按照当前的分隔符,得到下一个字符标记;
(4)String nextToken(String delim)  :根据指定的delim返回下一个字符标记。

 九.基于UDP协议的网络通信
1.UDP协议(User Datagram Protocol)即:用户数据包协议,是一种不可靠的网络协议,
它在通信示例的两端各各建立一个Socket,但这两个Socket之间没有虚拟连接,
这两个Scoket只是发送、接收数据包的对象
2.UDP是一种不可靠的协议;因为UDP协议是一种面向非链接的协议,面向非链接的协议是的就是正式通信之前不必与对方建立连接;

3.   UDP协议的主要作用是完成网络数据流量和数据包之间的连接转换    
信息的发送端,UDP协议将网络数据流量封装成数据包,然后将数据包发送出去。
信息的接收端,UDP协议将数据包接收后转换成实际的数据内容。
4.UDP和TCP对比
TCP协议:可靠,传输数据包的大小没有限制,但是需要连接建立时间,差错控制的开销大;
UDP协议:不可靠,差错控制开销小,传输数据包大小有限制(64K以下),不需要建立连接。
5.UDP使用:
DatagrmSocket对象作用基于UDP的Socket,使用DatagramPacket代表DatagrmSocket发送和接受的数据包;

6.使用DatagrmSocket发送和接受数据包
构造方法:
DatagrmSocket();创建一个DatagramSocket实例,并将该对象绑定到本机默认的IP地址,
在本机的可用端口中随机选择某个端口
DatagramSocket(int prot):创建一个DatagramSocket实例,
并将该对象绑定到本机默认的IP地址并且指定端口
DatagramSocket(int prot,InetAddress iaddr):创建一个DatagramSocket实例,
并将该对象绑定到本机指定的IP地址并且指定端口
方法:
receive(DatagramPacket p):从当前的DatagramSocket中接收数据包。
send(DatagramPacket p):以DatagramSocket对象向外发送数据。
7.DatagramPacket
DatagramPacket的构造方法
DatagramPacket (byte buf[],int length):以一个空数组来创建DatagramPacket对象,
该对象的作用是接收DatagramSocket中的数据
DatagramPacket (byte buf[],int length, InetAddress addr,int port):
以一个包含数据的数组来创建DatagramPacket对象,
创建DatagramPacket时还指定了IP地址和端口,即决定了当前数据包发送的目的地;
DatagramPacket (byte buf[],int offset,int length):以一个空数组来创建DatagramPacket对象
,并指定接收到的数据放入buf数组中时从offset开始,最多放legth个字节;
DatagramPacket (byte buf[],int offset,int length, InetAddress addr,int port):
创建一个用于发送的DatagramPacket对象,也指定了一个offset参数

方法:
InetAddress getAdress():返回某台机器的IP地址,当程序准备发送数据包时,
该方法返回此数据包的目标机器的IP地址;当程序刚刚接收到一个数据包时,
该方法返回该数据包的发送主机的IP地址;
int getPort():返回某台机器的端口,当程序准备发送数据包时,
该方法返回此数据包的目标机器端口;当程序刚刚接收到一个数据包时,
该方法返回数据包的发送主机上的端口。
SocketAddress getSocketAddress():返回完整SocketAdress,
通常由IP地址和端口组成。当程序准备发送此数据包时,
该方法返回此数据包的目标ScoketAdress;当程序刚刚接收到一个数据包时,
该方法返回该数据包是源ScoketAdress。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Java 网络编程