网络编程
文章目录
什么是网络编程
在网络通信协议下,不同计算机上运行的程序,进行的数据传输。
- 应用场景:即时通信、网络对战、金融证券、国际贸易、邮件、等等。
不管什么场景,都是计算机跟计算机之间通过网络进行数据传输。
- Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。
BS架构的优缺点
- 不需要开发客户端,只需要页面+服务端
- 用户不需要下载,打开浏览器就能使用
- 如果应用过大,用户体验受到影响
CS架构的优缺点
- 画面可以做的非常精美,用户体验好
- 需要开发客户端,也需要开发服务端
- 用户需要下载和更新的时候太麻烦
网络编程三要素
IP
全称:Internet Protocol,是互联网协议,也称IP地址。
是分配给上网设备的数字标签。
IPV4
全称:Internet Protocol version 4,互联网通信协议第四版。
用点分十进制进行表示
IPV4的地址分类形式
公网地址(万维网使用)和私有地址(局域网使用)
192.168.开头的就是私有地址,范围即为192.168.0.0——192.168.255.255,专门为组织机构内部使用,以此节省IP
特殊IP地址
127.0.0.1,也可以是localhost:是回送地址也称本地回环地址,也称本机IP,永远只会寻找当前所在本机。
IPV6
全称:Internet Protocol version 6,互联网通信协议第六版。
由于互联网的蓬勃发展,IP地址的需求量越来越大,而IPV4的模式下IP的总数是有限的。
采用128为地址长度,分成8组。
InetAddress
端口号
协议
UDP协议
- 用户数据报协议
- UDP是面向无连接通信协议。
- 速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据。
- UDP使用尽最大努力交付。
- 面向报文。对应用层交下来的报文,既不合并也不拆分,保留这些报文的边界。
- UDP没有拥塞控制。
- UDP支持一对一、一对多、多对一、多对多的交互通信。
- UDP首部开销小。
TCP协议
- 传输控制协议
- TCP是面向连接的通信协议
- 速度慢,没有大小限制,数据安全。
- 每一条TCP连接只能有两个端点,每条TCP连接只能是点对点(一对一)
- TCP提供可靠交付服务
- TCP提供全双工通信
- 面向字节流。TCP中的流指的是流入到进程或从进程流出的字节序列
UDP通信编程
package mysoketnet.udpdemo;
import java.io.IOException;
import java.net.*;
public class SendMessageDemo {
public static void main(String[] args) throws IOException {
//发送数据
//1.创建DatagramSoket对象(快递公司)
//细节:
//绑定端口,以后我们就是通过这个端口往外发送
//空参:所有可用的端口中随机一个进行使用
//有参:指定端口号进行绑定
DatagramSocket ds = new DatagramSocket();
//2.打包数据
String str = "你好";
byte[] bytes = str.getBytes();
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();
}
}
package mysoketnet.udpdemo;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class ReceiveMessageDemo {
public static void main(String[] args) throws IOException {
//接收数据
//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 length = dp.getLength();
InetAddress address = dp.getAddress();
int port = dp.getPort();
System.out.println("接收到数据"+new String(data,0,length));
System.out.println("该数据是从"+address+"这台电脑中的"+port+"发出的");
//4.释放资源
ds.close();
}
}
UDP三种通信方式
①单播
以前的代码就是单播
②组播
③广播
TCP通信编程
以上方式只能发英文,中文会乱码。
解决方案