//-------------------------------------------------------------------------------------------------------
1 package com.peng.Socket_UDP; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 8 /* 9 * 客户端 发送信息和接收信息 10 * 11 * 发送:(按照服务器的要求输入数据) 12 * 需要知道地址,端口,数据 13 * 地址:InetAdrress.getByName("localhost");--------(同一台电脑的写法) 14 * 端口:整型数据------------------(与服务器对应) 15 * 数据:byte[]-----------------(自己的数据) 16 * 数据报:new DatagramPacket(数据,数据长度,地址,端口); 17 * 通信:new DatagramSocket()-----------服务器还要在这里定义端口new DatagramSocket(int port) 18 * socket.send(packet); 19 * 20 * 接收: 21 * 需要数据: 22 * byte[] 23 * 数据报: 24 * new DatagramPacket(数据,数据长度); 25 * socket接收 26 * socket.recieve(新数据报); 27 * 28 * 字符串与字节数组的联系: String s =new String(byte[] b,int from,int to); 29 * 在数据报中的形式就是:String info=new String(data2,0,packet2.getLength()); 30 * 31 */ 32 public class UDPClient { 33 public static void main(String[] args) throws IOException { 34 /* 35 * 向服务器端发送数据 36 */ 37 //1.定义服务器的地址、端口号、数据 38 InetAddress address=InetAddress.getByName("localhost"); 39 int port=8800; 40 byte[] data="用户名:admin;密码:123".getBytes(); 41 //2.创建数据报,包含发送的数据信息 42 DatagramPacket packet=new DatagramPacket(data, data.length, address, port); 43 //3.创建DatagramSocket对象 44 DatagramSocket socket=new DatagramSocket(); 45 //4.向服务器端发送数据报 46 socket.send(packet); 47 48 /* 49 * 接收服务器端响应的数据 50 */ 51 //1.创建数据报,用于接收服务器端响应的数据 52 byte[] data2=new byte[1024]; 53 DatagramPacket packet2=new DatagramPacket(data2, data2.length); 54 //2.接收服务器响应的数据 55 socket.receive(packet2); 56 //3.读取数据 57 String reply=new String(data2, 0, packet2.getLength()); 58 System.out.println("我是客户端,服务器说:"+reply); 59 //4.关闭资源 60 socket.close(); 61 } 62 }
//-------------------------------------------------------------------------------------------------------
1 package com.peng.Socket_UDP; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 8 public class UDPServer { 9 /* 10 * 不停的接收和发送数据 就让recieve一直循环 但是要把socket.close删除就可以了 11 */ 12 public static void main(String[] args) throws IOException { 13 14 /* 15 * 接收客户端发送的数据 16 */ 17 //1.创建服务器端DatagramSocket,指定端口 18 DatagramSocket socket=new DatagramSocket(8800); 19 //2.创建数据报,用于接收客户端发送的数据 20 byte[] data =new byte[1024];//创建字节数组,指定接收的数据包的大小 21 DatagramPacket packet=new DatagramPacket(data, data.length); 22 //3.接收客户端发送的数据 23 System.out.println("****服务器端已经启动,等待客户端发送数据"); 24 socket.receive(packet);//此方法在接收到数据报之前会一直阻塞 25 //4.读取数据 26 String info=new String(data, 0, packet.getLength()); 27 System.out.println("我是服务器,客户端说:"+info); 28 29 /* 30 * 向客户端响应数据 31 */ 32 //1.定义客户端的地址、端口号、数据 33 InetAddress address=packet.getAddress(); 34 int port=packet.getPort(); 35 byte[] data2="欢迎您!".getBytes(); 36 //2.创建数据报,包含响应的数据信息 37 DatagramPacket packet2=new DatagramPacket(data2, data2.length, address, port); 38 //3.响应客户端 39 socket.send(packet2); 40 //4.关闭资源 41 socket.close(); 42 } 43 44 }