(1)InetAddress getAddress()
返回发送端或者接收端的IP地址,得看在哪一端。
(2)int getPort()
返回发送端或者接收端的端口号。
(3)bytep[] getData()
返回将要接收或者发送的数据。
(4)int getLength()
返回将要接收或者发送的数据的长度。java
(1)DatagramSocket()
该构造方法用于建立发送端的DatagramSocket对象,没有指定端口,系统会自动分配一个。
(2)DatagramSocket(int port)
既能够用于发送端又能够用于接收端。在用于接收端的时候必须指定端口号,这样才能监听端口。
(3)DatagramSocket(int port,InetAddress addr)
该对象适用于计算机上有多块网卡的情形,使用时能够明确规定数据经过哪块网卡向外发送和接收 哪块网卡的数据。因为计算机中针对不一样的网卡分配不一样的IP地址,所以在建立对象的时候须要指定IP地址。node
(1)void receive(DatagramPacket p)
将接受到的数据填充到DatagramPacket数据包中,在接收到数据以前会一直处于阻塞状态,只有当接收到数据包的时,该方法才会返回。
(2)void send(DatagramPacket p)
放送DatagramPacket数据包,发送的数据包中包含将要发送的数据,数据的长度,远程主机的IP地址和端口号。
(3)void close
关闭当前的Socket,通知驱动程序释放为这个Socket保留的资源。git
package com.bjpowernode.java_learning; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class D128_1_ServerTest { public static void main(String[] args) { DatagramSocket socket = null; DatagramPacket packet_send = null; DatagramPacket packet_receive = null; int port = 5151; //服务器监听端口号 try { socket = new DatagramSocket(port); //建立链接对象 System.out.println("服务器启动"); byte[] r = new byte[1024]; //建立缓存数组 packet_receive = new DatagramPacket(r,r.length);//建立数据包对象 socket.receive(packet_receive); //接收数据包 InetAddress client_ip = packet_receive.getAddress();//客户端地址 int client_port = packet_receive.getPort(); //客户端的端口号 byte[] data = packet_receive.getData(); //客户端字节数据 int len = packet_receive.getLength(); //数据有效长度 String str1 = new String(data,0,len); //将字节数据转换为字符串 System.out.println("客户机"+client_ip+":"+client_port+"\n发送的信息是:"+str1); String response = "Hello,I am Server B"; byte[] s = response.getBytes(); packet_send = new DatagramPacket(s,s.length,client_ip,client_port);//建立响应数据包对象 socket.send(packet_send); }catch(Exception e) { System.out.println(e); }finally { socket.close(); } } }
package com.bjpowernode.java_learning; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class D128_2_ClientTest { public static void main(String[] args) { DatagramSocket socket = null; DatagramPacket packet_send = null; DatagramPacket packet_receive = null; String server = "127.0.0.1"; //服务器IP地址 int port = 5151; //服务器端口号 String str = "Hello,I am Client A"; byte[] data = str.getBytes(); //将要发送的信息转换为字节数组 try { socket = new DatagramSocket(); //建立链接socket对象 InetAddress addr = InetAddress.getByName(server); //将服务器端的IP地址封装成InetAddress对象 packet_send = new DatagramPacket(data,data.length,addr,port);//建立数据包对象 socket.send(packet_send); //向服务器发送数据 byte[] r = new byte[1024]; //设置缓冲区 packet_receive = new DatagramPacket(data,data.length,addr,port);//建立数据包对象 socket.receive(packet_receive); //接收数据包 byte[] response = packet_receive.getData(); //读取数据包中的数据信息 int len = packet_receive.getLength(); //读取数据长度 String str1 = new String(response,0,len); //将字节数据转换成字符串 System.out.println("服务器响应的信息是:"+str1); }catch(Exception e) { System.out.println(e); }finally { socket.close(); } } }