Java核心类库(三)

本文介绍了网络编程的基础知识,包括OSI七层模型和TCP五层模型,详细讲解了TCP和UDP协议的特点。此外,还阐述了IP地址、端口号在网络编程中的作用,以及基于TCP的C/S架构编程模型。在反射机制部分,讨论了Class、Constructor、Field和Method类在动态创建对象和调用方法中的应用。
摘要由CSDN通过智能技术生成

一、网络编程

1.OSI七层模型和TCP五层模型

OSI:应用层->表示层->会话层->传输层->网络层->数据链路层->物理层

TCP:应用层                            ->传输层->网络层->数据链路层->物理层

当发送数据时,按照以上顺序层层装包将数据发送,当接受数据时按照相反方向层层拆包获取数据

2.通信协议

2.1TCP通信协议特点(传输控制协议,类似打电话):

1)建立连接,进行通信且通信阶段全程保持连接(保持了数据的可靠性和有序性),断开连接的方式

2)传输数据前进行三次握手(1.我准备要发送数据了 2.我已接受你的通知可以发送 3.我已接受你的接受通知,同时这时候就可以发送数据了)

3)全双工(同时在两个方向上进行传输,将可用通道分为两部分,一部分用于发送数据,另一部分用于接收数据。)字节流通信方式,可实现大数据传输

4)每次输出完毕后需要释放连接发送效率比较低

2.2UDP通信协议特点(用户数据包协议,类似于写信):

1)不需要保持连接,也就是不需要建立连接

2)不保证数据的可靠性和有序性

3)全双工数据包通信方式,数据包大小限制在64KB

4)发送数据完毕后无需释放连接开销小,效率快

3.IP地址和端口号(网络编程需要IP+端口号组成套接字socket)

3.1 IP(定位一台设备)

IP地址中,192.168.1.1是绝大多数路由器的登录地址用于配置用户名和密码与Mac过滤。127.0.0.1代表本地回环地址主机名:localhost

IP地址是互联网中唯一地址表示本质上主流是32位二进制整数的IPV4,而且日常生活中采用点分十进制方式表示

查看IP地址:dos窗口:ipconfig

3.2端口号(定位一台设备的一个进程)

十六位二进制整数组成,表示范围:0-65535其中0~1024被系统占用

特殊端口号:HTTP:80 FTP:21 Oracle:1521 Mysql:3306 Tomcat:8080

4.基于TCP协议的编程模型(重点)

4.1C/S架构:

客户端部分:每个用户独有,负责执行前台功能

服务器部分:多个用户共享信息和功能,负责后台服务

4.2相关类和方法

客户端的套接字对应服务器的套接字都包含输入输出流,都是通过客户端Socket创建输入输出流

客户端的socket.getInputStream()连接服务器的socket.getOutputStream()

客户端的socket.getOutputStream()连接服务器的socket.getInputStream()

ServerSocket类:服务器套接字

ServerSocket(int port):根据参数指定端口号构造对象

Socket accpet():侦听并接受套接字的连接请求

void close():用于关闭套接字

Socket类:客户端套接字,两台机器通信的端点

Socket(String ip, int port):指定服务器的主机名和端口构造套接字对象

InputStream getInputStream():获取套接字的输入流

OutputStream getOutputStream():获取套接字的输出流

void close():关闭套接字

4.3编程模型:

服务器:

创建ServerSocket对象并提供端口号

通过accept方法等待用户连接

使用输入输出流通信

关闭Socket套接字

客户端:

创建Socket对象并提供服务器的IP和端口号连接

使用输入输出流通信

关闭Socket套接字

4.4常用代码说明(里面的类和方法都是常用的)

双方用的套接字是同一个,所以输入输出流都是相对应的,可实现同时双向传输数据

创建服务器的线程类,在每个客户端的套接字连接进来时,使用合成复用原则,将套接字对象作为一个该类的一个新特性,通过新对象调用该对象来达到复用功能。每个套接字一个线程

 服务器端 套接字:永远不关闭,一直处于等待连接状态

 客户端:

创建套接字socket

利用scanner类获取输入

将输入的字符串传入printStream类(接受OutputStream类),再用println方法将字符串写进输出流中(对应服务器的输入流)

获取客户端的输入流对应服务器的输出流,将其转为字符流再转为BufferedReader进行打印

5.UDP

5.1编程模型

接收方:

创建DatagramSocket对象并提供端口号

创建DatagramPacket对象提供缓冲区

通过socket接收数据放入packet中调用receive方法

关闭socket

发送方:

创建DatagramSocket对象

创建DatagramPacket对象提供缓冲区并提供接收方的通信地址(IP和port)

通过socket将packet数据发送调用send方法

关闭socket方法

5.2相关类方法

DatagramSocket类:用于描述发送和接受数据包的套接字(类似邮局)

DatagramSocket()无参构造:用于发送方

DatagramSocket(int port)指定端口号构造对象:用于接收方

receive(DatagramPacket p)接收数据包放到 p中

send(DatagramPacket p)将数据包发出

close()关闭套接字

DatagramPacket类:描述数据包,实现无连接包裹投递

DatagramPacket(byte[] buf, int length)制定参数构造对象接受数据包用于接收方

DatagramPacket(byte[] buf, int length, InetAddress address, int port)制定参数构造对象发送数据包用于发送方发送到指定端口

InetAddress getAddress() 获取发送方或接收方的通信地址

int getPort()获取发送方或接收方的端口号

int getLength()数据长度

InetAddress类:描述互联网通信地址

static InetAddress getLocalHost()获取通信地址

static InetAddress getByName(String host)根据制定主机名获取通信地址

3.代码说明

接收方 :

构建DatagramSocket对象提供端口号说明为接收方

创建DatagramPacket并调用receive方法接受数据包

同时可以传输数据创建另一个DatagramPacket并将传输的地址放入调用send方法,因为DatagramPacket中已经指定了传输到那个IP和port

因为dp.getAddress和dp.getPort方法可以在receive之后获得发送方的IP和Port。

发送方

 6.URL类

统一资源定位器,可以是简单的文件或目录也可以是复杂对象的引用。通过URL可以访问网络资源

6.1常用方法

URL(String spec)按照参数构造对象

String getProtocol() 获取协议名

String getHost():主机名

int getPort()端口号名

String getPath:路径名

String getFile:获取文件名

URLConnection openConnection()获取URLConnection类实例

URLConnection类

inputStream getInputStream()获取输入流,可以获取资源内容放入文件中

void disconnect()断开连接

二、反射机制

也叫动态编码技术:动态创建对象并动态调用方法的机制(运行代码时由传递的参数决定创建或运行什么样的方法)

1.Class类:用于描述Java类或者接口也就是以数据类型

1.1获取Class对象常用方法

1)数据类型.Class方式:Class c1 = String.class;

2)调用class类forname方法:Class c1 = Class.forName(“java.lang.String”);

获取到Class对象后创建该类的实例:c1.newInstace();

2.Constructor类:用于描述构造方法的信息

2.1Class类常用方法

1)Constructor getConstructor(Class<?>...parameterTypes):获取Class对象中参数指定的构造方法

2)Constructor<?>[] getConstructors:获取Class对象中所有公共构造方法,返回的是数组

2.2Constructor类常用方法

T newInstance(Object ...):用Constructor对象构造Class对象代表类的实力

int getModifiers():获取方法的修饰符

String getName():获取方法的名字

Class<?>[] getParameterTypes():获取方法所有参数类型

3.Field类:用于描述单个成员变量

3.1Class常用方法

Field getDeclaredField(String name)获取Class对象中指定参数的单个成员变量信息

Field[] getDeclaredFields()获取Class对象中所表示类中所有成员变量信息

3.2Field常用方法

Object get(Object obj):获取参数对象obj中此Field对象所表示成员变量的值 obj一般是Class对象实例

void set(Object obj, Object value):设置参数对象obj中此Field对象所表示成员变量的值为value obj一般是Class对象实例

void setAccessible(boolean flag):参数为true时取消Java语言访问检查,也就是private修饰的成员变量也可以访问

int getModifiers():成员变量访问修饰符

Class<?> getType():成员变量数据类型

String getName():成员变量名称

3Method类:单个成员方法

4.其他结构信息

由Class对象调用

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值