UDP是一种面向无连接的协议,在通信时发送端和接收端不用建立连接。
构造方法创建DatagramPacket对象
发送端一定要明确指出数据的目的地(ip地址和端口号),而接收端不需要明确知道数据的来源,只需要接收到数据即可。
DatagramSocket()
用于创建发送端的DatagramSocket对象
DatagramSocket(int port)
创建接收端的DatagramSocket对象
* 发送端
* 1,创建DatagramPacket对象,封装数据,接收的地址和端口
* 2,创建DatagramSocket对象
* 3,调用DatagramSocket中的send方法,发送数据包
* 4,关闭资源DatagramSocket
* UDP接收端
*
* 1,创建DatagramSocket对象,绑定端口号(要和发送端端口号一致)
* 2,创建字节数组,接收发来的数据
* 3,创建数据包对象DatagramPacket
* 4,调用DatagramSocket对象方法receive(DatagramPacket dp)接收数据,数据放在数据包中
* 5,拆包
package com.oracle.demo02; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; import sun.print.resources.serviceui; //客户端 public class TCPClient { public static void main(String[] args) throws IOException, IOException { Scanner sc=new Scanner(System.in); // 创建客户端对象,明确要连接的服务器所在的ip地址和端口号 Socket socket=new Socket("127.0.0.1",9999); //获取字节输出流 OutputStream fos=socket.getOutputStream(); //向服务器写数据 fos.write(sc.next().getBytes()); //接收服务器响应 //获取字节输入流 InputStream fis=socket.getInputStream(); byte[] bytes=new byte[1024]; int len=fis.read(bytes); //获取ip地址 String ip=socket.getInetAddress().getHostAddress(); System.out.println("ip地址为:"+ip+",发送的内容为:"+new String(bytes,0,len)); socket.close(); } }
package com.oracle.demo02; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Scanner; //服务器端 public class TCPserver { public static void main(String[] args) throws IOException { Scanner sc=new Scanner(System.in); // 创建服务器对象,明确端口号 ServerSocket server=new ServerSocket(9999); //和客户端创建联系 Socket socket=server.accept(); //获取字节输入流 InputStream fis=socket.getInputStream(); byte[] bytes=new byte[1024]; int len=fis.read(bytes); //获取客户端ip String ip=socket.getInetAddress().getHostAddress(); System.out.println("ip地址为:"+ip+",发送的内容为:"+new String(bytes,0,len)); //回复客户端 //获取字节输出流 OutputStream fos=socket.getOutputStream(); fos.write(sc.next().getBytes()); //释放资源 server.close(); } }
原文:https://www.cnblogs.com/longmingyeyu/p/12790700.html