//-------------------------------------------------------------------------------------------------------
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 }