DatagramSocket类: 构造方法: DatagramSocket(): 表示建立一个默认的套接字,并绑定到本地地址和一个随机的端口号 DatagramSocket(int port): 与上面不一样的是,绑定到特定端口号,其它不变 DatagramSocket(int port, InetAddress iad): 表示建立一个套接字,绑定到特定的端口号及指定地址 DatagramSocket(SocketAddress sad); 表示建立一个套接字,绑定到特定的套接字地址 小提示:所谓的本地地址咱们能够这样来理解,咱们经过“控制面板-本地链接-支持”中能够看到一个IP地址,这就是本地的IP地址,也暂且理解为本地地址。 基本方法: close(): 关闭套接字 recevie(DatagramPacket dp): 接受数据报 send(DatagramPacket dp): 发送数据报 这里触及了数据报,下面介绍数据报: DatagramPacket类: 构造方法:(只列出主要的) 接受类型: DatagramPacket(byte[] buf, int length): 用来接受长度为length的buf数据(即数据存于字节数组buf中) 发送类型: DatagramPacket(byte[] buf, int length, InetAddress address, int port); 将length长的buf数据发送到指定的地址的端口号处 DatagramPacket(byte[] buf, int length, SocketAddress address); 将length长的buf数据发送到指定的套接字地址处 有上面可知,咱们发送数据时构造的数据报应该是发送类型的,而接受数据报时应该是接受类型的 开始书写代码 代码意图: 1.一个接收方,一个发送方 2.当接收方收到发送方发送的消息后,打印发送的消息及发送方的地址和端口号,以后向发送反馈一条信息“接受方:我收到了!” 3.发送方打印出接收方反馈的消息 详细思路见代码:
接收方:java
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketAddress; public class Getter { public static void main(String[] args) { try { //肯定接受方的IP和端口号,IP地址为本地机器地址 InetAddress ip = InetAddress.getLocalHost(); int port = 8888; //建立接收方的套接字,并制定端口号和IP地址 DatagramSocket getSocket = new DatagramSocket(port,ip); //肯定数据报接受的数据的数组大小 byte[] buf = new byte[1024]; //建立接受类型的数据报,数据将存储在buf中 DatagramPacket getPacket = new DatagramPacket(buf,buf.length); //经过套接字接收数据 getSocket.receive(getPacket); //解析发送方传递的消息,并打印 String getMes = new String(buf,0,getPacket.getLength()); System.out.println("对方发送的消息:"+getMes); //经过数据报获得发送方的IP和端口号,并打印 InetAddress sendIP = getPacket.getAddress(); int sendPort = getPacket.getPort(); System.out.println("对方的IP地址是:"+sendIP.getHostAddress()); System.out.println("对方的端口号是:"+sendPort); //经过数据报获得发送方的套接字地址 SocketAddress sendAddress = getPacket.getSocketAddress(); //肯定要反馈发送方的消息内容,并转换为字节数组 String feedback = "接收方说:我收到了!"; byte[] backBuf = feedback.getBytes(); //建立发送类型的数据报 DatagramPacket sendPacket = new DatagramPacket(backBuf,backBuf.length,sendAddress); //经过套接字发送数据 getSocket.send(sendPacket); //关闭套接字 getSocket.close(); } catch (Exception e) { e.printStackTrace(); } } }
发送方:数组
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; public class Sender { public static void main(String[] args) { try { //建立发送方的套接字,IP默认为本地,端口号随机 DatagramSocket sendSocket = new DatagramSocket(); //肯定要发送的消息: String mes = "你好!接收方!"; //因为数据报的数据是以字符数组传的形式存储的,因此传转数据 byte[] buf = mes.getBytes(); //肯定发送方的IP地址及端口号,地址为本地机器地址 int port = 8888; InetAddress ip = InetAddress.getLocalHost(); //建立发送类型的数据报: DatagramPacket sendPacket = new DatagramPacket(buf,buf.length,ip,port); //经过套接字发送数据: sendSocket.send(sendPacket); //肯定接受反馈数据的缓冲存储器,即存储数据的字节数组 byte[] getBuf = new byte[1024]; //建立接受类型的数据报 DatagramPacket getPacket = new DatagramPacket(getBuf,getBuf.length); //经过套接字接受数据 sendSocket.receive(getPacket); //解析反馈的消息,并打印 String backMes = new String(getBuf,0,getPacket.getLength()); System.out.println("接受方返回的消息:"+backMes); //关闭套接字 sendSocket.close(); } catch (Exception e) { e.printStackTrace(); } } }