java中的网络编程

计算机网络

计算机网络是指将地理位置不同的具有独立功能的多态计算机及其外部设备,通过通信线路连接起来,在网路操作系统,网络管理硬件通信协议的管理和协调下,实现资源的共享和信息传递的计算机系统。

从中我们可以了解到:

1.计算机网络的作用:资源共享的信息传递

2.计算机网络的组成

a计算机硬件(大中小型服务器,台式机,笔记本),外部设备(路由器,交换机),通信线路(双绞线,光纤)

b计算机软件:网络操作系统,网络管理软件,网络通信协议 。

由于网络结点之间联系很复杂,在制定协议时,把复杂成份分解成一些简单的成份,再将他们复合起来。最常用的复合方式是层次方式,即同层间可以通信,上一层可以调用下一层,在与下一层不发生关。

 

3数据封装与解封
        由于用户传输的数据一般都比较大,有的可以达到MB字节,一次性发送出去十分困
难,于是就需要把数据分成许多片段,再按照一定的次序发送出去。这个过程就需要对数据
进行封装。
        数据封装(Data Encapsulation)是指将协议数据单元(PDU)封装在一组协议头和协议尾中的过程。在OSI七层参考模型中,每层主要负责与其它机器上的对等层进行通信。该过程是在协议数据单元(PDU)中实现的,其中每层的PDU一般由本层的协议头、协议尾和数据封装构成。

1.数据发送处理过程
(3)数据链路层接收到包,再添加上MAC头部和尾部,这个数据单元称为帧
(Frame)。然后,将帧交给物理层。
(4)物理层将接收到的数据转化为比特流,然后在网线中传送。
⒉数据接收处理过程
(1)物理层接收到比特流,经过处理后将数据交给数据链路层。
(2)数据链路层将接收到的数据转化为数据帧,再除去MAC头部和尾部,这个除去
控制信息的过程称为解封,然后将包交给网络层。
(3)网络层接收到包,再除去IP头部,然后将段交给传输层。
(4)传输层接收到段,再除去TCP头部,然后将数据交给应用层。
从以上传输过程中,可以总结出以下规则:
(1)发送方数据处理的方式是从高层到底层,逐层进行数据封装。
(2)接收方数据处理的方式是从底层到高层,逐层进行数据解封装。

 

 IP地址

        IP地址用来标识网络中的一个通信实体的地址,通信实体可以说计算机,路由器等。比如互联网中的每个服务器都要有自己的IP地址,而每个局域网的计算机要通信也要配置IP地址。

路由器是连接两个或多个网络的网络设备。

        目前主流的使用IP地址是IPV4,但是随着网络的规模不断的扩大,ipv4面临着地址枯竭的危险,所以就退出了ipv6.

        IPV4:32位地址,并以8位为一个单位,分成四部分,以点分十进制表示192.168.0.1

        IPV6:128位,写成8个16位的无符号的整数,每个整数用四个十六进制为表示,每个数之间用冒号(:)分开。

注意的是127.0.0.1 是本机地址

192.168.0.0-192.168.255.255为私有地址,属于非注册地址,专门为组织架构内部使用。

端口

        IP地址用来标识一台计算机,但是计算机上可能有多个网络应用程序,如何来区分这些程序呢?这就要用端口。

        端口是虚拟的概念,并不是说主机上真的有端口。通过端口,可以在一个主机上运行多个网络应用程序。端口得到表示是一个16位的二进制整数,对应十进制0-65535.

Oracle,MySQL,Tomcat,QQ,MSN,等网络程序都有自己的端口。

URL(统一资源定位符)

        在www上每一信息资源都有统一且唯一的地址,改地址就叫做URL,它是www的统一资源定位符。URL由四个部分组成:协议,存放资源的主机域名,资源文件名和端口号。如果未指定该端口号,则使用的协议默认的端口。例如http协议的默认端口号80,在浏览器访问网页时,地址栏显示的地址就是URL。

在java.net包中提供url类,该类封装了大量复杂的涉及从远程站点获取信息的细节。

 Socket(套接字)
        我们开发的网络应用程序位于应用层,TCP和UDP属于传输层协议,在应用层如何使
用传输层的服务呢?在应用层和传输层之间,则是使用套接字Socket来进行分离。套接字就像是传输层为应用层开的一个小口,应用程序通过这个小口向远程发送数据,或者接收远程发来的数据;而这个小口以内,也就是数据进入这个口之后,或者数据从这个口出来之前,是不知道也不需要知道的,也不会关心它如何传输,这属于网络其它层次工作。Socket'实际是传输层供给应用层的编程接口。Socket就是应用层与传输层之间的桥梁。使用Socket编程可以开发客户机和服务器应用程序,可以在本地网络上进行通信,也可通过Internet在全球范围内通信。
 

套接字Socket是一种进程间的数据交换机制。这些进程既可以在同一机器上,也可以在通过网络连接的不同机器上。换句话说,套接字起到通信端点的作用。单个套接字是一个端点,而一对套接字则构成一个双向通信信道,使非关联进程可以在本地或通过网络进行数据交换。一旦建立套接字连接,数据即可在相同或不同的系统中双向或单向发送,直到其中一个端点关闭连接。套接字与主机地址和端口地址相关联。主机地址就是客户端或服务器程序所在的主机的IP地址。端口地址是指客户端或服务器程序使用的主机的通信端口。
在客户端和服务器中,分别创建独立的Socket,并通过Socket 的属性,将两个Socket
进行连接,这样,客户端和服务器通过套接字所建立的连接使用输入输出流进行通信。
TCP/IP 套接字是最可靠的双向流协议,使用TCP/IP可以发送任意数量的数据。
实际上,套接字只是计算机上已编号的端口。如果发送方和接收方计算机确定好端口,
他们就可以通信了。
 

通过Socket的编程顺序:
1.创建服务器ServerSocket,在创建时,定义ServerSocket的监听端口
(在这个端口接收客户端发来的消息)。
2.ServerSocket 调用accept()方法,使之处于阻塞状态。
3.创建客户端Socket,并设置服务器的IP及端口。
4.客户端发出连接请求,建立连接。
5.分别取得服务器和客户端Socket的 InputStream和OutputStream.
6.利用Socket和ServerSocket进行数据传输。
7.关闭流及Socket。

 

TCP/IP通信连接的简单过程:
位于A计算机上的TCP/IP软件向B计算机发送包含端口号的消息,B计算机的TCP/IP
软件接收该消息,并进行检查,查看是否有它知道的程序正在该端口上接收消息。如果有,
他就将该消息交给这个程序。
要使程序有效地运行,就必须有一个客户端和一个服务器。

 

7 TCP协议和UDP协议联系和区别
TCP协议和UDP协议是传输层的两种协议。Socket是传输层供给应用层的编程接口,所以Socket编程就分为TCP编程和UDP编程两类。
在网络通讯中,TCP方式就类似于拨打电话,使用该种方式进行网络通讯时,需要建立专门的虚拟连接,然后进行可靠的数据传输,如果数据发送失败,则客户端会自动重发该数据。

而UDP方式就类似于发送短信,使用这种方式进行网络通讯时,不需要建立专门的虚拟连接,传输也不是很可靠,如果发送失败则客户端无法获得。这两种传输方式都在实际的网络编程中使用,重要的数据一般使用TCP方式进行数据传输,而大量的非核心数据则可以通过UDP方式进行传递,在一些程序中甚至结合使用这两种方式进行数据传递。由于TCP需要建立专用的虚拟连接以及确认传输是否正确,所以使用TCP方式的速度稍微慢一些,而且传输时产生的数据量要比UDP稍微大一些。

总结:

TCP是面向连接的,传输数据是安全的,稳定的,效率相对较低。

UDP是面向无连接的,传输数据是不安全的,但是效率较高。

 DatagramPacket:数据容器(封包)的作用此类表数据报包。数据报包用来实现将发送的数据进行封包处理的。
常用方法:
DatagramPacket(byte[] buf, int length) :构造数据报包,用来指定长度为length的数据包。
DatagramPacket(byte[] buf, int length, InetAddress address, int port) :构
造数据报包,用来将长度为length的包发送到指定主机上的指定端口号。

getAddress()∶获取发送或接收方计算机的IP地址,此数据报将要发往该机器或
者是从该机器接收到的。
getData)∶获取发送或接收的数据。
setData(byte[] buf) :设置发送的数据。

 

DatagramSocket:用于发送或接收数据报包
当客户端要向服务端发送数据时,需要在客户端产生一个DatagramSocket对象,在服务端产生一个DatagramSocket对象。客户端的DatagramSocket将DatagramPacket发送到网络上,然后被服务端的 DatagramSocket接收。
常用方法:
DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口。
send(DatagramPacket p)︰从此套接字发送数据报包。
receive(DatagramPacket p)︰从此套接字接收数据报包。
close) :关闭此数据报套接字。

 

端口是虚拟的概念,并不是说在主机上真的有若干个端口。
在www 上,每一信息资源都有统一且唯一的地址,该地址就叫URL (Uniform
Resource Locator),它是www的统一资源定位符。


TCP与UDP的区别
TCP是面向连接的,传输数据安全,稳定,效率相对较低。
UDP是面向无连接的,传输数据不安全,效率较高。


Socket通信是一种基于TCP协议,建立稳定连接的点对点的通信。
网络编程是由java.net包来提供网络功能。
lnetAddress:封装计算机的IP地址和DNS(没有端口信息! )。
InetSocketAddress:包含IP和端口,常用于Socket通信。
URL:以使用它的各种方法来对URL对象进行分割、合并等处理。
基于TCP协议的Socket编程和通信
网络编程是由java.net包来提供网络功能。
InetAddress:封装计算机的IP地址和DNS(没有端口信息! )。
lnetSocketAddress:包含IP和端口,常用于Socket通信。
URL:以使用它的各种方法来对URL对象进行分割、合并等处理。
基于TCP协议的Socket编程和通信
“请求-响应”模式:
Socket类:发送TCP消息。
ServerSocket类:创建服务器。


UDP通讯的实现
DatagramSocket:用于发送或接收数据报包。
常用方法: send()、receive)、close0.
DatagramPacket:数据容器(封包)的作用
常用方法:构造方法、getAddrress(获取发送或接收方计算机的IP地址)、
getData(获取发送或接收的数据)、setData(设置发送的数据)。

 

反射介绍
1什么是反射
Java反射机制是Java语言一个很重要的特性,它使得Java具有了“动态性”。在Java程序运行时,对于任意的一个类,我们能不能知道这个类有哪些属性和方法呢?对于任意的一个对象,我们又能不能调用它任意的方法?答案是肯定的!这种动态获取类的信息以及动态调用对象方法的功能就来自于Java语言的反射(Reflection)机制。
2反射的作用
简单来说两个作用,RTTI(运行时类型识别)和DC(动态创建)。我们知道反射机制允许程序在运行时取得任何一个已知名称的class的内部信息,包括包括其modifiers(修饰符),fields(属性),methods(方法)等,并可于运行时改变fields内容或调用methods。那么我们便可以更灵活的编写代码,代码可以在运行时装配,无需在组件之间进行源代码链接,降低代码的耦合度;还有动态代理的实现等等;但是学要注意的是发射使用不会造成很高的资源消耗!
 

创建对象的过程:

1创建java对象的三个阶段。

2创建对象的内存结构。

我们要使用一个类,首先要加载类;加载完类之后,在堆内存中,就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象就包含了完整的类的结构信息。我们可以通过这个对象知道类的结构。这个对象就像一面镜子,透过这个镜子可以看到类的结构,所以,我们形象的称之为:反射。因此,“Class对象”是反射机制的核心。


获取Class对象的三种方式
通过getClass()方法。
通过.class静态属性。
通过Class类中的静态方法forName()方法

 

 

 

反射机制的效率
由于Java反射是要解析字节码,将内存中的对象进行解析,包括了一些动态类型,而
JVM无法对这些代码进行优化。因此,反射操作的效率要比那些非反射操作低得多!

setAccessible方法
setAccessible()方法:
setAccessible是启用和禁用访问安全检查的开关。值为true则指示反射的对象在使用时应该取消Java语言访问检查。值为 false 则指示反射的对象应该实施lava语言访问检查;默认值为false。由于JDK的安全检查耗时较多.所以通过setAccessible(true)的方式关闭安全检查就可以达到提升反射速度的目的。

总结
Java 反射机制是Java语言一个很重要的特性,它使得Java具有了“动态性”。


反射机制的优点:
更灵活。
一更开放。


反射机制的缺点:
降低程序执行的效率。
增加代码维护的困难。


获取Class类的对象的三种方式:
运用getClass0。
运用.class语法。
运用Class.forName()(最常被使用)。


反射机制的常见操作
动态加载类、动态获取类的信息(属性、方法、构造器)。
动态构造对象。
动态调用类和对象的任意方法。
动态调用和处理属性。
获取泛型信息。
处理注解。

 


 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值