网络编程
概述:
计算机跟计算机之间通过网络进行数据传输;
软件架构:
常见的软件架构:
CS/BS
CS/BS的区别和优缺点:
CS: 客户端服务端模式需要开发客户端;
BS: 浏览器服务端模式不需要开发客户端;
CS: 适合定制专业化的办公类软件如: IDEA、网游;
BS: 适合移动互联网应用,可以在任何地方随时访问的系统;
网络编程三要素:
概述:
IP: 设备在网络中的地址,是唯一的标识;
端口号: 应用程序在设备中唯一的标识;
协议: 数据在网络中传输的规则;
常见的协议有UDP,TCP,http,https,ftp
分类:
IP:
作用:
设备在网络中的地址,是唯一的标识;
IPv4的特点:
目前的主流方案;
最多只有2^32次方个ip,目前已经用完了;
- 现在是利用局域网IP解决IP不够的问题;
- 127.0.0.1属于特殊IP,永远表示本机;
IPv6的特点:
为了解决IPv4不够用而出现的;
最多有2^128次方个ip;
可以为地球上的每一粒沙子都设定ip;
InetAddress:
- 概述:
此类表示Internet协议(IP)地址;
此类不对外开放构造方法,只能使用getByName(String host)方法获得该对象;
- 常用方法:
static InetAddress getByName(String host) 确定主机名称的IP地址,主机名称可以是机器名称,也可以是IP地址;
String getHostName() 获取此IP地址的主机名;
String getHostAddress() 返回文本显示中的IP地址字符串;
端口号:
作用:
应用程序在设备中唯一的标识;
概述:
由两个字节表示的整数,取值范围: 0~65535
其中0~1023之间的端口号用于一些知名的网络服务或者应用;
我们自己使用1024以上的端口号就可以了;
注意:
一个端口号只能被一个应用程序使用;
协议:
概述:
计算机网络中,连接和通信的规则被称为网络通信协议;
OSI参考模型: 世界互联协议标准,全球通信规范,单模型过于理想化,未能在因特网上进行广泛推广;
TCP/IP参考模型(或TCP/IP协议): 事实上的国际标准;
UDP协议:
- 用户数据报协议(User Datagram Protocol);
- UDP是面向无连接通信协议;
- 特点:速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据;
UDP通信程序(发送数据):
- 步骤:
//1.创建发送端的DatagramSocket对象;
DatagramSocket ds = new DatagramSocket();
//2.打包数据(DatagramPacket);
String str = "你好威啊!!!!";
byte[] bytes = str.getBytes();
//获取IP
InetAddress address = InetAddress.getByName("127.0.0.1");
//指定端口
int port = 10086;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
//3.发送数据;
ds.send(dp);
//4.释放资源;
ds.close();
- 细节(DatagramSocket):
绑定端口,以后我们就是通过这个端口往外发送;
空参: 所有可用的端口中随机一个进行使用;
有参: 指定端口号进行绑定
UDP通信程序(接收数据):
- 步骤:
//1.创建接收端的DatagramSocket;
DatagramSocket ds = new DatagramSocket(10086);
//2.接收打包好的数据;
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
//3.解析数据包;
byte[] data = dp.getData();
int len = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println("接收到数据:" + new String(data,0,len));
System.out.println("该数据是从" + address + "这台电脑" + port + "端口发出的");
//4.释放资源;
ds.close();
- 细节:
ds.receive(dp):
该方法是阻塞的; 程序执行到这一步的时候,会在这里死等; 等发送端发送消息;
DatagramSocket ds = new DatagramSocket(10086):
接收端的端口,要与发送端打包数据的端口号一致;
UDP的三种通信方式:
1.单播: 上面的代码就是单播的;
2.组播:
创建的DatagramSocket对象变为MulticastSocket对象;
组播地址: 224.0.0.0~239.255.255.255; 其中224.0.0.0~224.0.0.255为预留的组播地址;
接送的时候需要用MulticastSocket对象调用joinGroup方法,将当前本机,添加到224.0.0.1的这一组当中;
3.广播:
广播地址: 255.255.255.255;
将单播中,指定的ip改为广播地址即可;
TCP协议:
- 传输控制协议TCP(Transmission Control Protocol);
- TCP协议是面向连接的通信协议;
- 特点:速度慢,没有大小限制,数据安全;
TCP通信程序(发送数据/客户端);
//TCP协议,发送数据
//1.创建Socket对象
Socket socket = new Socket("127.0.0.1", 10000);
//2.可以从连接通道中获取输出流
OutputStream os = socket.getOutputStream();
//写出数据
os.write("aaa".getBytes());
//3.释放资源
os.close();
socket.close();
TCP通信程序(接收数据/服务器);
//TCP协议,接收数据
//1.创建对象ServerSocker
ServerSocket ss = new ServerSocket(10000);
//2.监听客户端的链接
Socket socket = ss.accept();
//3.从连接通道中获取输入流读取数据
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
int b;
while((b = br.read()) != -1){
System.out.print((char)b);
}
//4.释放资源
br.close();
socket.close();
ss.close();
TCP通信程序(三次握手和四次挥手):
三次握手协议保证连接建立;
四次挥手,利用这个协议断开连接,而且保证连接通道里面的数据已经处理完毕了;
UUID类
表示不可变通用唯一标识符(UUID)的类;
调用randomUUID()方法来获取;
标签:DatagramSocket,IP,编程,网络,TCP,new,ds,dp
From: https://www.cnblogs.com/chj020415/p/17737123.html