1:网络编程(理解)
(1)网络编程:用java代码实现多台计算机的通信。
Socket编程,套接字编程。
(2)网络模型(了解,计算机网络)
计算机网络
把多台计算机通过线路连接起来.
作用:实现资源共享和信息的传递.
ISO七层模型
应用层:应用程序
表示层:加密,解密,压缩,解压缩
会话层:通过传输层建立传输通道
传输层:定义了一些协议和端口
网络层:封装解封装IP地址
数据链路:封装为贞
物理层:网线接口类型,传输byte流数据
数据是IO流的方式传输
TCP/IP模型
(3)网络通信的三要素(掌握)
A:IP地址
唯一标识一台计算机
IP地址的概述
为了方便记忆,IP使用点分十进制计数法.
IP地址分类: IPV4(32bit),IPV6(128bit)
A类:1.0.0.0.1-127.255.255.254 10.x.x.x私有地址
B类:128.0.0.1-191.255.255.254 172.16.0.0-172.31.255.255私有地址,169.254.0.0保留地址
C类:192.0.0.1-223.255.255.254 192.168.x.x 私有地址
D类:224.0.0.1-239.255.255.254
E类:240.0.0.1-247.255.255.254
IP地址的组成
IP地址 = 网络号+主机地址
A类:256*256*256*127
B类:256*256*256
C类:256*256
特殊IP地址
127.0.0.1 本机IP地址
x.x.x.0 网络地址
x.x.x.255 广播地址
DOS命令
ipconfig 查看IP地址
ping x.x.x.x 监测网络连接
InetAddress类的使用。
static InetAddress getByName(String host)
InetAddress发现没有构造:
1) 全部是静态的.
2) 单例设计模式.
3) 通过一个静态方法,返回该类的对象.
掌握的方法:
InetAddress getByNeme(String host) //指定的主机,返回InetAddress
InetAddress getLocalHost() //返回本地主机
掌握的功能:
String getHostName()
String getHostArress()
B:端口
应用程序的逻辑标识。
物理端口:网卡口
逻辑端口:我们指的是逻辑端口
1) 每个网络程序至少有一个
2) 由于标识进程的逻辑地址
3) 有效端口0-65535,0-1024系统保留端口
C:协议
通信的规则。
UDP:
面向无连接。
数据不可靠。
数据速度快。
大小有限制。
举例:
凌波发数据,群发短信
TCP:
面向连接。
数据可靠。
数据速度慢。
大小无限制。
举例:
打电话
(4)Socket对象:(理解)
应用程序的通信,其实就是在Socket对象间通过IO进行数据的交互。
用于描述IP地址和端口,每个服务打开一个Socket,并绑定一个端口,不同的端口对应不同的服务.
通信两端都有Socket.
网络通信其实就是Socket间的通信.
数据通过两个Socket间通过IO传输.
(5)UDP协议(理解 参照UDP发送接收数据图)
发送数据
A:创建UDP协议发送数据的Socket对象。
B:创建数据并打包。
C:发送数据。
D:释放资源
代码体现:
//-------------创建UDP协议发送数据的Socket对象-----------
//创建Socket对象
DatagramSocket ds = new DatagramSocket();
//-------------创建数据并打包--------------
//创建数据
String str = "Hello,UDP,我来了!";
//数据转换成字节数组保存
byte[] bys = str.getBytes();
//定义ip地址
InetAddress address = InetAddress.getByName("192.168.1.113");
//封装数据
DatagramPacket dp = new DatagramPacket(bys,bys.length,address,10000);
//-----------------发送数据----------------
//发送数据
ds.send(dp);
//-----------------释放数据-----------------
//释放资源
ds.close();
接收数据
A:创建UDP协议接收数据的Socket对象。
B:创建数据包用于接收数据。
C:接收数据,并解析数据。
D:释放资源。
代码体现:
//-----------------创建UDP协议接收数据的Socket对象-----------------
DatagramSocket ds = new DatagramSocket(10000);
//-----------------创建数据包用于接收数据-----------------
//创建数组存储数据
byte[] bys = new byte[1024];
//创建数据包接收数据
DatagramPacket dp = new DatagramPacket(bys,bys.length);
//-----------------接收数据,并解析数据-----------------
//接收数据
ds.receive(dp);
//解析数据包
byte[] by = dp.getData();
//获取数据的实际长度
int len = dp.getLength();
//将数组的内容转换成String数据
String data = new String(by,0,len);
//控制台打印
System.out.println("Client:"+ data);
//-----------------释放资源-----------------
ds.close();
(6)TCP协议(理解 参照TCP发送接收数据图)
客户端
A:创建客户端Socket对象。
B:获取输出流对象
C:使用输出流对象输出数据。
D:释放资源
代码体现:
//--------------创建Socket对象--------------
Socket s = new Socket("192.168.1.113",10086);
//--------------创建输出流对象--------------
OutputStream os = s.getOutputStream();
//创建数据
String data = "TCP,我来了!";
//--------------使用输出流输出数据--------------
os.write(data.getBytes());
//--------------释放资源--------------
s.close();
服务器端(TCP程序一定要先运行服务端,后运行client.)
A:创建服务器Socket对象。
B:监听并获取客户端对象。
C:获取输入流。
D:根据输入流读取数据。
E:释放资源
代码体现:
//--------------创建服务端Socket对象--------------
ServerSocket ss = new ServerSocket(10086);
//--------------监听并获取客户端对象--------------
Socket s = ss.accept();
//--------------获取输入流--------------
InputStream is = s.getInputStream();
//--------------根据输入流获取数据--------------
byte[] bys = new byte[1024];
//解析数据,将数据保存到bys数组并返回数组长度
int len = is.read(bys);
//数组装换成String数据
String data = new String(bys,0,len);
//控制台打印数据
System.out.print("Data is:"+data);
//--------------释放资源--------------
s.close();
ss.close();
}