java-网络编程UDP

80 阅读2分钟

WeChatf8464b68c358da2d51710224ea181b0e.png

网络通信的三要素

要素一,ip地址,设备在网络中的地址,是唯一标识

  • ipv4协议。32bit 4字节

WeChatab865464caa5f2f7cf4ed87aad17e67c.png

  • ipv6 128bit 16字节。

WeChat3b914289b09d8987da48b424ef12057d.png

WeChat623f2cd06fb6cfb28bc144aba7783d1b.png

ip地址形式
  • 公网地址

  • 局域网地址

192.168是常见的局域网开头标识。局域网的范围从192.168.0.0~192.168.255.255

本地计算机ip地址:127.0.0.1 或者是localhost:称为回送地址也可称本地回环地址只会寻找当前本机

ip常用命令
  • ipconfig:查看本机ip地址
  • ping ip地址:检查网络是否连通。

InetAddress ip地址对象类

//  
try {  
// 返回本主机的地址对象  
System.out.println(InetAddress.getLocalHost());  
// 返回指定主机的ip地址对象。参数是域名或者是ip地址  
InetAddress ip = InetAddress.getByName("www.baidu.com");  
// 获取ip地址的主机名  
System.out.println(ip.getHostName());  
// 返回ip地址的ip  
System.out.println(ip.getHostAddress());  
// 在指定的时间毫秒内连接对应的主机  
boolean bo = ip.isReachable(2000);  
System.out.println(bo ? "在1毫秒内接通":"在1毫秒内没有接通");  
  
  
} catch (UnknownHostException e) {  
throw new RuntimeException(e);  
} catch (IOException e) {  
throw new RuntimeException(e);  
}

要素二,端口号,应用程序在设备中的唯一标识。被规定为一个16位的二进制.范围是0~65535

端口类型
  1. 周知端口:0-1023 被预先定制的知名应用占用。如http 80 ftp 21
  2. 注册端口:1024~49151 分配给用户进程或者某些应用程序。比如Tomact8080 MySql 3306
  3. 动态端口:49152~65535,一般是不固定分配给某个进程是动态分配的。

要素三, 协议,数据在网络传输中的规则,常见的协议有UDP协议和TCP协议。

WeChatb2c27fc98579823f2feb5222ade7e463.png

WeChat733b66883bdecc30b2c7cbddba5e6fc2.png

WeChat7c31fce321bf37c3669f41fd0147a811.png

UDP的使用。

WeChat43ec01d67912689022d7766a1edb1440.png

WeChatb6126dae0f47e2ee5de7fb1888aa461e.png

WeChatf80c2b54e9388676f7fafd07f88777ab.png

DatagramSocket client = new DatagramSocket();  
// 创建数据包对象,封装数据  
/**  
* 封装发送的数据。  
* 数据的大小  
* 发送端的ip地址,  
* 端口号  
*/  
InetAddress service = InetAddress.getLocalHost();  
byte[] data = "这是我的消息".getBytes();  
DatagramPacket packet = new DatagramPacket(data,data.length, service, 8888);  
// 发送数据出去  
client.send(packet);  
// 发送玩数据之后可以关掉管道  
client.close();
    
创建接收端对象  
DatagramSocket socket = new DatagramSocket(8888);  
byte[] buffer = new byte[1024 * 64];  
// 创建数据包对象,接收数据  
DatagramPacket packet = new DatagramPacket(buffer,buffer.length);  
// 等待接收数据  
socket.receive(packet);  
// 获取接收到的数据的大小  
int size = packet.getLength();  
String str = new String(buffer, 0,size);  
System.out.println("收到数据" + str);