Java 网络编程 UDP协议

Posted 博客张C

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 网络编程 UDP协议相关的知识,希望对你有一定的参考价值。

网络编程

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();//释放资源

}

}

 

以上是关于Java 网络编程 UDP协议的主要内容,如果未能解决你的问题,请参考以下文章

基于UDP协议的网络编程

Java-UDP Socket编程

Java 网络编程 两类传输协议:TCP UDP

Java学习总结(十三)——基于UDP协议网络编程

java 网络编程 基于UDP协议的通信

JAVA高并发网络编程之TCP和UDP协议