java,UDP协议简单实现

//UDP协议简单实现-----Serverpackage UDP;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;

public class UdpServer implements Runnable {
    private int port;

    public UdpServer(int port) {
        this.port = port;
    }

    public void run() {
        try {
            // listening at port for udp request
            DatagramSocket server = new DatagramSocket(new InetSocketAddress(port));
            byte[] bs = new byte[4];
            ByteBuffer bbuf = null;
            DatagramPacket data = new DatagramPacket(bs, bs.length);
            server.setSoTimeout(1000 * 10); // set timeout
            while (true) { // 一直监听
                server.receive(data);
                bbuf = ByteBuffer.wrap(bs, 0, 4);
                String s = "receive " + data.getData().length + " byte data,value: " + bbuf.getInt();
                System.out.println(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        new Thread(new UdpServer(11111)).start();
    }
}

//客户端实现;

package UDP;

    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetSocketAddress;

    public class UdpClient implements Runnable {
        private int port;

        public UdpClient(int port) {
            this.port = port;
        }

        public void run() {
            try {
                DatagramSocket client = new DatagramSocket();
                byte[] bs = new byte[4];
                InetSocketAddress isa = new InetSocketAddress("localhost", port);
                DatagramPacket data = new DatagramPacket(bs, bs.length);
                data.setSocketAddress(isa);
                for (int i = 0; i < 10; i++) {
                    data.setData(int2bytes(i));
                    client.send(data);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        static byte[] int2bytes(int num) {
            byte[] b = new byte[4];
            for (int i = 0; i < 4; i++) {
                b[i] = (byte) (num >>> (24 - i * 8));
            }
            return b;
        }
    }

//测试代码;

package UDP;

public class Test {
    public static void main(String[] args) throws InterruptedException {
        int port = 11111;
        try{
            new Thread(new UdpServer(port)).start();
            new Thread(new UdpClient(port)).start();
        }catch(Exception e){
            //e.printStackTrace();
        }
    }
}
时间: 2024-08-01 10:57:09

java,UDP协议简单实现的相关文章

Java UDP的简单实例以及知识点简述

UDP的实现 Java中实现UDP协议的两个类,分别是DatagramPacket数据包类以及DatagramSocket套接字类. 其与TCP协议实现不同的是: UDP的套接字DatagramSocket相比于Socket.ServerSocket来说,是一个非常简单的概念,没有连接的含义.套接字只需要知道侦听和发送数据包的本地端口即可. 也就是在TCP协议中庸Socket类和ServerSocket类进行功能划分,UDP协议中只用一个数据包套接字DatagramSocket发送和接受数据即可

UDP协议----简单的CS模型实现

UDP简单介绍 传输层主要应用的协议模型有两种,一种是TCP协议,另外一种则是UDP协议.TCP协议在网络通信中占主导地位,绝大多数的网络通信借助TCP协议完成数据传输.但UDP也是网络通信中不可或缺的重要通信手段. 相较于TCP而言,UDP通信的形式更像是发短信.不需要在数据传输之前建立.维护连接.只专心获取数据就好.省去了三次握手的过程,通信速度可以大大提高,但与之伴随的通信的稳定性和正确率便得不到保证.因此,我们称UDP为"无连接的不可靠报文传递". 那么与我们熟知的TCP相比,

Java UDP通信简单实现

1.Java实现方式 1)服务器端 /** * UDP服务器端 * */ public class UdpServer { // 定义一些常量 private final intMAX_LENGTH = 1024; // 最大接收字节长度 private final intPORT_NUM = 5066; // 端口号 // 用以存放接收数据的字节数组 private byte[] receMsgs = new byte[MAX_LENGTH]; // 数据报套接字 private Datagr

UDP 协议简单编程

最近温故一下工作没有使用过的一些知识点,下面就是练习中使用的代码,提供给大家分享 客户端 // 客户端 public class UDPClient { public static void main(String[] args) throws IOException { DatagramSocket ds = null;// 定义接受数据的对象 byte[] data = new byte[1024]; // 开辟空间,接受数据 DatagramPacket dp = null; // 声明D

通过socket和Udp协议简单实现一个群体聊天工具(控制台)

编写一个聊天程序.有收数据的部分 和 发数据的部分.这两个部分需要同时执行,这就用到多线程技术,一个线程负责收,一个现象负责发. 因为收和发动作是不一致的,所以要定义两个run方法而且这两个方法要封装到不同类中. import java.net.*; import java.io.*; 发送端: class Send implements Runnable { private DatagramSocket ds; public Send(DatagramSocket ds) { this.ds=

Java网络编程 - 基于UDP协议 实现简单的聊天室程序

最近比较闲,一直在抽空回顾一些Java方面的技术应用. 今天没什么事做,基于UDP协议,写了一个非常简单的聊天室程序. 现在的工作,很少用到socket,也算是对Java网络编程方面的一个简单回忆. 先看一下效果: 实现的效果可以说是非常非常简单,但还是可以简单的看到一个实现原理. "聊天室001"的用户,小红和小绿相互聊了两句,"聊天室002"的小黑无人理会,在一旁寂寞着. 看一下代码实现: 1.首先是消息服务器的实现,功能很简单: 将客户端的信息(进入了哪一个聊

Java中UDP协议的基本原理和简单用法

UDP协议是非面向连接的,相对于TCP协议效率较高,但是不安全.UDP协议类似发信息的过程,不管接收方是在线还是关机状态,都会把信息发送出去.但是如果接收方不处于接收信息的状态,发送出去的数据包就会丢失. convert()方法是用来转换字节数组和基本类型. /** * 创建基于udp协议的服务接受端 * @author wxisme * */ public class MyServer { public static void main(String[] args) throws IOExce

java基础知识回顾之java Socket学习(一)--UDP协议编程

UDP传输:面向无连接的协议,不可靠,只是把应用程序传给IP层的数据报包发送出去,不保证发送出去的数据报包能到达目的地.不用再客户端和服务器端建立连接,没有超时重发等机制,传输速度快是它的优点.就像寄信,写好信放到邮箱桶里面,既不能保证信件在邮递过程中不丢失,也不能保证信件是按顺序寄到目的地的. 看java API用到java.net.DatagramSocket和java.net.DatagramPacket类: DatagramSocket:此类表示用来发送和接收数据报包的套接字(IP地址和

java使用UDP协议传输数据

UDP协议(User Datagram Protocol,用户数据报协议)不同于TCP协议,它是不可能靠的,但是它比TCP协议具有更快的传输速度,UDP发送的数据单元称为数据报,当网络传输UDP传输UDP数据报是无法保证数据能够到达目的地,也无法保证按发送的顺序到达目的地,也就是说先发送了"hello",再发送了"world",但接收方可能会先收到"world",再收到"hello",也有可能收不到数据,为什么呢?因为它是不可