欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 基于UDP 多客户端通信

程序员文章站 2024-03-23 09:57:46
...

一、前言

今天是1024,先祝大家少脱发,多挣钱。

二、UDP

UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

三、实现

用到的主要包装类

DatagramPacket//数据报

DatagramSocket//套接字

UDPCilent.java 客户端实现

import javax.xml.crypto.Data;
import java.io.IOException;
import java.net.*;

public class UDPCilent {
    public static void main(String[] args) throws IOException {
        //根据localhost获取IP地址
        InetAddress inetAddress = InetAddress.getByName("localhost");
        //指定端口
        int port = 8800;
        //准备信息
        byte[] bytes="用户名WYH123,密码123".getBytes();
        //将信息放到数据报中
        DatagramPacket packet=new DatagramPacket(bytes,bytes.length,inetAddress,port);
        //使用套接字发送数据报
        DatagramSocket socket =new DatagramSocket();
        socket.send(packet);

        System.out.println("已向服务器端发送数据,等待服务器的响应");

        //创建第二个数据包,用于保存响应
        byte[] bytes1=new byte[1024];
        DatagramPacket packet1=new DatagramPacket(bytes1,bytes1.length);

        socket.receive(packet1);

        System.out.println("接收到的服务器响应为:"+new String(bytes1,0,bytes1.length));
    }

}

UDPServer.java 服务端实现

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

/**
    基于UDP的服务器端
 */
public class UDPServer {
    public static void main(String[] args) throws IOException {
        DatagramSocket socket=new DatagramSocket(8800);

        System.out.println("***服务器端已经启动***");

        byte[] data = new byte[1024];

        DatagramPacket packet=new DatagramPacket(data,data.length);


        //不断地去接受数据报
        while(true)
        {
            socket.receive(packet);
            System.out.println("服务器接收到的信息为:"+new String(data,0,data.length));
            ServerThread serverThread=new ServerThread(packet);
            serverThread.run();
        }

    }

}

ServerThread.java

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ServerThread extends  Thread {
    DatagramPacket packet=null;
    public  ServerThread(DatagramPacket packet)
    {
        this.packet=packet;
    }
    @Override
    public void run() {

        try {
            //向客户端响应
            InetAddress inetAddress=packet.getAddress();//获取刚才客户端的地址
            int port =packet.getPort();
            //准备数据
            byte[] data2="欢迎您".getBytes();
            //创建数据报
            DatagramPacket packet1=new DatagramPacket(data2,data2.length,inetAddress,port);
			
            DatagramSocket datagramSocket=new DatagramSocket();
            datagramSocket.send(packet1);
            datagramSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}