Java基于UDP协议的简单通讯实例

news/2024/5/18 12:07:49 标签: udp, java

源码下载:http://download.csdn.net/detail/u011983531/9451560

一、服务端

java">package com.ghs.udp;

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

public class UdpServer {

    private int PORT=5050;
    private DatagramSocket socket;
    private DatagramPacket packet;
    private byte[] dataBytes;
    private StringBuilder receiveData=new StringBuilder();//保存接收到的数据
    private String sendData;//要发送的数据

    public UdpServer(){
        init();
    }

    private void init(){
        try {
            socket = new DatagramSocket(PORT);
            dataBytes = new byte[1024];
            packet = new DatagramPacket(dataBytes, dataBytes.length);
            while(true){//循环接收数据
                socket.receive(packet);
                int length = packet.getLength();
                if(length>0){//如果数据包不为空,就打印出接收到的数据
                    receiveData.append(new String(packet.getData(),0,length));
                    System.out.println(receiveData);
                    //回复消息
                    sendData = "收到";
                    dataBytes = sendData.getBytes();
                    packet = new DatagramPacket(dataBytes, dataBytes.length,
                            packet.getAddress(),packet.getPort());
                    socket.send(packet);
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        socket.close();
    }

    public static void main(String[] args) {
        new UdpServer();
    }
}

二、客户端

java">package com.ghs.udp;

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


public class UdpClient {
    private int PORT = 5050;
    private DatagramSocket socket;
    private DatagramPacket packet;
    private byte[] dataBytes;
    private StringBuilder receiveData=new StringBuilder();//保存接收到的数据
    private String sendData;//要发送的数据

    public UdpClient() {
        init();
    }

    private void init(){
        try {
            //发送数据
            socket = new DatagramSocket();
            sendData = "UDP发送数据";
            dataBytes = sendData.getBytes();
            packet = new DatagramPacket(dataBytes, dataBytes.length,
                    InetAddress.getByName("localhost"),PORT);
            socket.send(packet);

            //接受数据
            while(true){
                dataBytes = new byte[1024];
                packet = new DatagramPacket(dataBytes, dataBytes.length);
                socket.receive(packet);
                int length = packet.getLength();
                if(length>0){
                    receiveData.append(new String(packet.getData(),0,length));
                    System.out.println(receiveData);
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        socket.close();
    }

    public static void main(String[] args) {
        new UdpClient();
    }
}

http://www.niftyadmin.cn/n/1530624.html

相关文章

JDBC的4种驱动类型

Java中的JDBC驱动可以分为四种类型,包括JDBC-ODBC桥、本地API驱动、网络协议驱动和本地协议驱动。 类型一、JDBC-ODBC桥 JDBC-ODBC 桥是sun公司提供的,是jdk提供的的标准API. 这种类型的驱动实际是把所有 JDBC的调用传递给ODBC ,再由ODBC调用本地数据库…

context-params与init-params

一、Servlet初始化参数的设置与使用 1、Servlet初始化参数定义在web.xml中的一个servlet元素中&#xff0c;例如&#xff1a; <servlet><servlet-name>testSer</servlet-name><servlet-class>com.ghs.test.TestSer</servlet-class><init-par…

MySQL执行计划与索引规范

一、MySQL explain执行计划详解 使用explain查看MySQL的执行计划时&#xff0c;会看到下面的输出结果。 首先&#xff0c;解释一下每一列的意思及常见的值。 1、id 在包含连接查询、子查询的语句中&#xff0c;使用explain查看执行计划时&#xff0c;会有多条结果。id越大…

Java Web并发访问的线程安全问题

一、Servlet的线程安全问题 Java web服务器下&#xff0c;每个Servlet只有一个实例&#xff08;即单例模式&#xff09;&#xff0c;导致有多个Http请求发给一个Servlet实例&#xff0c;每个请求是一个线程。如果Servlet有类变量或实例变量&#xff0c;那么该变量就变成了共享…

正确理解 ThreadLocal 的原理与应用场景

一、ThreadLocal解决了什么问题 网上有很多关于ThreadLocal解决了什么问题的资料&#xff0c;但是很多都是不正确的。 不正确的理解 ThreadLocal为解决多线程程序的并发问题提供了一种新的思路ThreadLocal的目的是为了解决多线程访问资源时的共享问题 正确的理解 看看JDK中…

Java递归算法实例

递归&#xff08;recursion&#xff09;&#xff1a;程序调用自身的编程技巧。 递归满足2个条件&#xff1a; 有反复执行的过程&#xff08;调用自身&#xff09;有跳出反复执行过程的条件&#xff08;递归出口&#xff09; 1、阶乘 n! n * (n-1) * (n-2) * …* 1(n>0)…

ADT安装后没有图标Android SDK Manager图标

ADT安装后没有图标Android SDK Manager图标&#xff0c;也就是没有下图标注的图标&#xff1a; 解决方法&#xff1a; 1、Window->Perspective->Customize Perspective 2、在打开的窗口中勾选Android SDK and AVD Manager 3、如果Android SDK and AVD Manager这…

String与Integer的相互转化

一、Integer转String //方法一:Integer类的静态方法toString() Integer a 2; String str Integer.toString(a)//方法二:Integer类的成员方法toString() Integer a 2; String str a.toString();//方法三:String类的静态方法valueOf() Integer a 2; String str String.val…