Java 网络编程 UDP协议

时间:2021-10-02 20:17:11

网络编程

TCP/IP协议:多台计算机网络连接的规则

包括:TCP协议、IP协议、UDP协议和其它协议的协议组

层次结构:

链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。硬件方面的

网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。

传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。

应用层:主要负责应用程序的协议,例如HTTP协议、FTP协议等。

 

IP地址和端口号   (端口号:软件编号  Mysql:3306

IP地址: 唯一标识一台计算机,

IPv4 4个字节(0-255) 用点分开 192.168.1.100

IPv6 16个字节,解决了网络地址资源数量不够的问题

 

端口号: 标识计算机中的应用程序  两个字节 范围是0~65535

0~1023 知名的网络服务和应用,

1024~65535:用户的普通应用程序需要使用

 

InetAddress网络通信协议

 

public static void main(String[] args) throws UnknownHostException {

InetAddress inet=InetAddress.getLocalHost();//获取本地主机名、IP地址

System.out.println(inet);//Super_pc/192.168.145.1    //192.168.1.147

 

InetAddress inet2=InetAddress.getByName("Super_pc");//通过主机名(会重复)获取一个inet对象

System.out.println(inet2);//Super_pc/192.168.145.1

 

InetAddress inet3=InetAddress.getByName("192.168.145.1");//通过IP获取inet对象  可以是别人的IP

System.out.println(inet3);//  /192.168.145.1

 

System.out.println(inet3.getHostName()); //返回对象主机名

System.out.println(inet3.getHostAddress()); //返回对象IP地址

}

UDP协议(传输 视频 音频)发送端  接收端

UDP是无连接通信协议,数据传输时,发送端和接收端不建立逻辑连接

发送端发出数据不会确认接收端是否存在

接收端收到数据不反馈给发送端

 

由于使用UDP协议消耗资源小,通信效率高,

由于UDP的面向无连接性,不能保证数据的完整性,

UDP传输数据被限制在64K以内

 

public class UDPSend {//发送端

public static void main(String[] args) throws IOException {

Scanner sc=new Scanner(System.in);

InetAddress inet=InetAddress.getByName("192.168.1.174");

//通过IP获取地址对象

DatagramSocket ds=new DatagramSocket(); //数据包发送对象

while(true){

String str=sc.nextLine();

byte[] bytes=str.getBytes(); //要发送的数据 转字节

DatagramPacket dp=new DatagramPacket(bytes,bytes.length,inet,6000);

        //数据包对象 (字节, 长度, 传输地址, 端口号)

ds.send(dp);//发送数据包

}

//ds.close();//释放资源

}

}

 

public class UDPRecieve {//接收端  先开启

public static void main(String[] args) throws IOException {

DatagramSocket ds=new DatagramSocket(6000);//数据包接收对象

byte[] bytes=new byte[1024];//字节数组  用来接收 数据

while(true){

DatagramPacket dp=new DatagramPacket(bytes,bytes.length);

//数据包对象

ds.receive(dp); //接收数据 存储到dp

 

int length=dp.getLength(); //接收数据的长度

byte[] data = dp.getData(); //接收数据的字节数组

 

//String dataStr = new String(data,0,length);//显示收到的数据

String dataStr = new String(bytes,0,length);//显示收到的数据

 

InetAddress inet = dp.getAddress(); //获取地址对象

String ip = inet.getHostAddress(); //获取IP地址

int port=dp.getPort(); //端口号

 

System.out.print("IP地址:"+ip+",端口号:"+port+",内容:"+dataStr);

}

//ds.close();//释放资源

}

}