JAVA--网络编程(UDP)

上午给大家简单介绍了一下TCP网络通信的知识,现在就为大家补充完整网络编程的知识,关于UDP的通信知识。

  UDP是一种不可靠的网络协议,那么还有什么使用价值或必要呢?其实不然,在有些情况下UDP协议可能会变得非常有用。因为UDP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。

  这种文字性的描述,我就不再赘述,相关方面的文字介绍百度上多的很,我就直接给大家介绍代码了。

一、基于UDP网络编程代码:

  服务器端

public class TestUDPServer {

    /**服务器端代码
     * @param args
     * 对于UDP和TCP的端口号,首先我们可以任意设置,但必须保证范围在65536以内
     * UDP和TCP的端口号没有关联,也就是说,UDP和TCP各有65536个端口
     */
    public static void main(String[] args) throws Exception{
        byte [] buf = new byte[1024];//设置存放数据的字符数组
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        DatagramSocket ds = new DatagramSocket(5888);//设置端口号
        while(true){
            ds.receive(dp);//接收客户端发过来的请求数据
            System.out.println(new String(buf, 0, dp.getLength()));
            //new String(buf, 0, dp.getLength()):String的构造方法,把一个字节数组转化为一个String类数据
        }
    }
}

  客户端

public class TestUDPClient {

    /**客户端代码实例
     * @param args
     * SocketAddress:网络上的地址,不但包括IP,还包括端口号等等
     * InetAddress:IP地址的超级
     * InetSocketAddress:IP地址+端口号
     */
    public static void main(String[] args) throws Exception{
        byte [] buf = new byte[1024];
        buf = (new String("Hello")).getBytes();//将String类型的数据转换为字符数组
        DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
        DatagramSocket ds = new DatagramSocket(9999);//设置客户端发送数据的端口号
        ds.send(dp);//向服务器发送数据
        ds.close();
    }
}

关于代码的细节讲解,我已经在其中进行注释,大家如果需要学习,可以直接拷贝,以上代码均是完整的,可以直接运行。

二、基于UDP的数据传输:

  服务器端

public class TestUDPServer1 {

    public static void main(String[] args) throws Exception{
        byte [] buf = new byte[1024];//设置存放数据的字符数组
        DatagramPacket dp = new DatagramPacket(buf, buf.length);
        DatagramSocket ds = new DatagramSocket(5888);//设置端口号
        while(true){
            ds.receive(dp);//接收客户端发过来的请求数据
            ByteArrayInputStream bais = new ByteArrayInputStream(buf);
            DataInputStream dis = new DataInputStream(bais);
            System.out.println(dis.readLong());
        }
    }
}

  客户端

public class TestUDPClient1 {

    public static void main(String[] args) throws Exception{
        Long L = 10000L;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        DataOutputStream dos = new DataOutputStream(baos);//DataOutputStream:可以直接写一个Long类型的数据
        dos.writeLong(L);
        byte [] buf = baos.toByteArray();
        DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("127.0.0.1",5888));
        DatagramSocket ds = new DatagramSocket(9999);//设置客户端发送数据的端口号
        ds.send(dp);//向服务器发送数据
        ds.close();
    }
}

  你一定有这样一个疑问,这有什么用处呢?好吧,我简单给你介绍一下,关于这种Long类型数据的传输在网络游戏中用处极多,为什么这么说呢?比如你在极品飞车中,系统要把你实时的在3维空间中的位置信息发送到别的玩家系统中,因为游戏要求传输速度必须快,所以基于UDP的数据传输在游戏开发过程中用处最多。

  以上只是一些基本的UDP编程代码,只为给大家简单介绍,让大家有一点的了解。

时间: 2024-10-07 04:33:09

JAVA--网络编程(UDP)的相关文章

JAVA网络编程UDP案例

Java网络编程.UDP案例 发送端 import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class SendUDP { public static vo

java 网络编程 UDP TCP

网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信....网页编程: 就是要基于html页面的基础上进行数据的交互的. 比如: 珍爱网. oa(办公自动化). 高考的报告系统... 计算机网络: 分布在不同地域 的计算机通过外部设备链接起来达到了消息互通.资源共享的效果就称作为一个计算机网络.网络通讯的三要素:    1. IP    2. 端口号.    3. 协

Java 网络编程 UDP协议

网络编程 TCP/IP协议:多台计算机网络连接的规则 包括:TCP协议.IP协议.UDP协议和其它协议的协议组 层次结构: 链路层:链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤.网线提供的驱动.硬件方面的 网络层:网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络. 传输层:主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议. 应用层:主要负责应用程序的协议,例如HTTP协议.F

JAVA网络编程--UDP通信

首先网络传输数据需了解例如以下三点 1.找到对方IP 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识.为了方便称呼这个数字,叫做port,逻辑port 3.  定义通信规则.这个通信规则称为协议. 国际组织定义了通用协议TCP/IP. 127.0.0.1本机回环地址 不易记忆,可用主机名 主机名:localhost 0-65535port范围 0-1024系统使用或保留port .当中mysql的port号为 3306 一.UDP UDP相对于

java 网络编程-UDP基本步骤

UDP:需要datagramSocket来进行中间的运输无连接的传输层协议,提供面向事务的简单不可靠信息传输服务.可能丢失.非常简单.开销小一切以包为中心数据传输不用IO流 接收端Address already in use: Cannot bind同一个协议下端口不允许冲突1.使用DatagramSocket指定端口 创建接收端2.准备容器封装成DatagramPacket 包裹3.阻塞式接受包裹receive(DatagramPacket p):4.分析数据getData()返回类型为字节数

java 网络编程-UDP图

原文地址:https://blog.51cto.com/14437184/2432470

java 网络编程-UDP基本类型传输(int、boolean、string)

接收端Address already in use: Cannot bind同一个协议下端口不允许冲突1.使用DatagramSocket指定端口 创建接收端2.准备容器封装成DatagramPacket 包裹3.阻塞式接受包裹receive(DatagramPacket p):4.分析数据,将字节数组还原为对应类型getData()返回类型为字节数组,getLength()返回数据长度,类型为int5.释放资源*/ public class http{ public static void m

Java网络编程(UDP程序设计)

//客户端 package org.udp; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UDPClient { public static void main(String[] args) throws Exception{ DatagramSocket ds = null; byte[] buf = new byte[2014]; DatagramPacket dp = null;

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

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

java网络编程socket\server\TCP笔记(转)

java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04|  分类: Socket |  标签:java  |举报|字号 订阅 1 TCP的开销 a  连接协商三次握手,c->syn->s,s->syn ack->c, c->ack->s b  关闭协商四次握手,c->fin->s, s->ack-c,s->fin->c,c->ack->s c  保持数据有序,响应确认等计算开销 d