import java.net.*;
//udp发送数据 class UdpSend7 { public static void main(String[] args) throws Exception { //1、创建udp服务。通过DatagramSocket对象 DatagramSocket ds = new DatagramSocket(); //2、确定数据,并封装到数据包中 byte[] buf = "udp ni hai hao ma?".getBytes(); DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("127.0.0.1"), 10000); //3、通过Socket服务发送数据。将已有的数据包发送出去,通过send方法。 ds.send(dp); //4、关闭资源 ds.close(); } }
三、通过Tcp发送、接收数据/* 接收udp数据 */ class UdpRece7 { public static void main(String[] args) throws Exception { //1、定义Socket服务 监听10000端口 DatagramSocket ds = new DatagramSocket(10000); //2、定义数据包,用于存储接收的数据 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); //3、通过服务的receive方法接收数据 ds.receive(dp); //4、通过数据包的方法获取其中的数据 //获取ip String ip = dp.getAddress().getHostAddress(); //获取数据 String data = new String(dp.getData(), 0, dp.getLength()); //获取端口 int port = dp.getPort(); //打印数据 System.out.println(ip + ":" + port + "::" + data); //5、关闭资源 ds.close(); } }
/* 需求,给服务端发送文本数据 */ import java.net.*; import java.io.*; class TcpClient3 { public static void main(String[] args) throws Exception { //1、创建客户端的Socket服务。指定目的主机和端口 Socket s = new Socket("127.0.0.1", 10000); //2、为了发送数据,应该获取socket流中的输出流 OutputStream out = s.getOutputStream(); out.write("tcp, wo you lai l".getBytes()); //3、 关闭Socket s.close(); } } /* 需求:定义服务端接收数据并打印 服务端: 1、建立服务端Socket服务。ServerSocket 并监听一个端口 2、获取连接过来的客户端对象 通过ServerSocket的accept方法。如果没有连接就会等待(阻塞式) 3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该客户对象的读取流来读取数据 4、关闭服务端。 */ class TcpServer3 { public static void main(String[] args) throws Exception { //1、创建服务端Socket服务 ServerSocket ss = new ServerSocket(10000); //2、获取客户端Socket Socket s = ss.accept(); //3、获取输入流 InputStream is = s.getInputStream(); String ip = s.getInetAddress().getHostAddress(); int port = s.getPort(); byte[] buf = new byte[1024]; int len = is.read(buf); String data = new String(buf, 0, len); System.out.println(ip + ":" + port + "::" + data); //关闭资源 s.close(); ss.close(); } }