网络编程:在网络通讯协议下,不同计算机上运行的程序,进行的数据传输
应用场景:即时通信、网游对战、金融证券、国际贸易、邮件等等。
不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输
java中可以使用java.net包下的技术轻松开发出常见的网络应用技术



网络编程三要素:
IP:设备在网络中的地址,是唯一的标识
端口:应用程序在设备中唯一标识
协议:数据在网络中传输的规则,常见的协议有UDP、TCP、Http、https、ftp

三要素:IP
全称是:Internet protocol,是互联网协议地址,也称为IP地址
是分配给上网设备的数字标签
通俗理解:IP是上网设备在网络中的地址,是唯一的
常见的IP分类:ipv4、ipv6



IPV4的一些细节:





三要素:端口号
应用程序在设备中的唯一标识
端口号:由两个字节标识的整数,范围在0~65535
其中0~1023的端口号是一些知名的网络服务或者应用的
我们使用1024及以上端口号就可以了
注意:一个端口号只能被一个应用使用
三要素:协议



UDP协议:

UDP发送:
package Day18_net;
import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
public class NetTest02 {
public static void main(String[] args) throws IOException {
//UDP发送数据
//1、创建DatagrameSocket对象
//细节:绑定端口,以后我们就是通过这个端口往外发送数据
//空参:所有可用端口中随机选择一个进行使用
//有参:指定端口号进行绑定
DatagramSocket ds = new DatagramSocket();
//2、打包数据
String str="你好";
byte[] bytes = str.getBytes(StandardCharsets.UTF_8);
//指定发送给哪台电脑
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();
}
}

UDP接收:
package Day18_net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class NetTest03 {
public static void main(String[] args) throws IOException {
//UDP接受数据
//1、创建DatagrameSocket对象
//细节:在接收的时候一定要绑定端口,而且绑定的端口要和发送的端口保持一致
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+"端口发出的");
ds.close();
}
}
这里有个细节:要先执行接收程序,再执行发送程序

聊天室:
package Day18_net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class NetSentTest01 {
public static void main(String[] args) throws IOException {
//1、创建对象:需要指定接收端口
DatagramSocket ds = new DatagramSocket(10086);
//2、接收数据
//2.1、新建一个字节数组
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
//3、接收数据
while (true) {
ds.receive(dp);
//4、接收数据后解析数据
byte[] data = dp.getData();
InetAddress address = dp.getAddress();
String hostName = dp.getAddress().getHostName();
String ip = dp.getAddress().getHostAddress();
System.out.println("ip为:"+ip+"主机名为"+hostName+"发送了数据"+new String(data,0,dp.getLength()));
}
}
}
package Day18_net;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class NetServiceTest01 {
public static void main(String[] args) throws IOException {
//1、创建对象
DatagramSocket ds = new DatagramSocket();
//2、创建要发送的数据
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("请输入要录入数据");
String str = sc.next();
if(str.equals("886")){
break;
}
//3、变成字节数组
byte[] bytes = str.getBytes();
//4、指定要发送的ip
InetAddress address = InetAddress.getByName("127.0.0.1");
//5、指定端口
int port=10086;
//6、打包数据
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
//7、发送数据
ds.send(dp);
}
//8、发送完后关闭资源
ds.close();
}
}
UDP的三种通信方式
单播:一对一发送信息
组播:一台电脑可以对一组电脑发送信息

下面的是接受端,如果有多个接收端,就可以同样copy相同的代码,然后都添加到224.0.01这一组中

广播:一台电脑给局域网中全部电脑发送信息
