java学习笔记 UDP协议

TCP的所有操作都建立在可靠的链接

UDP(数据报协议)发送的消息对方并不一定会接收到,所有的信息都是以数据报的形式发出

使用DatagramSocket类和DatagramPacket类完成操作

服务端UDP:

import java.net.*;
import java.io.*;

//定义服务端接收信息
public class TestUdpServer {
    public static void main(String[] args) {
        try {
            DatagramSocket ds = new DatagramSocket(9000);//设定监听端口号
            byte bytes[] = new byte[1024];//1KB
            DatagramPacket dp = new DatagramPacket(bytes,bytes.length);//DatagramPacket(byte[] buf, int length)构造方法
            //设定循环接收
            String str = null;
            while (true) {
                ds.receive(dp);//阻塞式方法,一直到接收到数据才解锁
                System.out.println("接收数据 : ");
                str = new String(bytes,0,dp.getLength());    //注意receive之后,dp填充的是bytes数组
                System.out.println(str + ": "+ dp.getAddress().getHostName() + "-----" + dp.getSocketAddress());
            }
        }catch(SocketException e1) {
            e1.printStackTrace();
        }catch(IOException e2) {
            e2.printStackTrace();
        }
    }
}

客户端UDP:

import java.net.*;
import java.io.*;

//定义客户端发送信息
public class TestUdpClient {
    public static void main(String[] args) {
        try {
            DatagramSocket ds = new DatagramSocket(8888);//设定监听端口
            String str = "Hello Word!";
            byte bytes[] = str.getBytes();
            //DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)
            //InetSocketAddress(InetAddress addr, int port)
            DatagramPacket dp = new DatagramPacket(bytes,0,bytes.length,new InetSocketAddress("192.168.0.121",9000));
            ds.send(dp);
            ds.close();
        }catch(SocketException e) {
            e.printStackTrace();
        }catch(IOException e2) {
            e2.printStackTrace();
        }
    }
}

结果:

时间: 2024-10-10 16:56:04

java学习笔记 UDP协议的相关文章

TCP/IP详解学习笔记--UDP协议

UDP协议基本介绍 1.基本概念 UDP是一个简单的面向数据包的运输层协议:进程的每一个输出操作都正好产生一个UDP数据报,并组装成一个待发送的IP数据报,与流字符协议不同,如TCP,应用程序产生的全体数据与真正发送的单个IP数据报没有联系,UDP提供不可靠的服务,它的数据报格式如下图所示 UDP数据报 IP首部 UDP首部 UDP数据 2.UDP首部 16位源端口号 16位目的端口号 16位UDP长度 16位UDP校验和 数据 数据 端口号表示发送进程和接收进程,TCP端口号与UDP端口号是相

java学习笔记 第二篇 核心技术(二)

第十四章 集合类 集合类用来存放对象的引用.继承关系如下图: 14.1 Collection 接口 是层次结构中的根接口,构成Collection的单位称为元素.Collection接口不能直接使用,但该接口提供了添加元素.删除元素.管理数据的方法. Collection接口常用方法: 14.2 List 集合 包括List接口以及List集合的所有实现类.List集合中的元素允许重复,各元素循序就是对象插入的顺序 1.List接口,两个重要方法: get(int index): 获取指定索引位

Java学习笔记3-操作符

Java基本操作符:+.-.*./.%.=.==.!=.+=.-=. 优先级:先乘除后加减,如果是连接符+号会优先往前匹配,比如 a+++++b,会被解释称 a++ ++ +b,所以会报错,需要自行使用括号隔离为 (a++) + (++b). 对象的引用如果赋值给了对象的引用后,2 个对象将指向同一个引用,有一个对象的引用重新赋值后将同时影响到另一个对象,比如 ClassName classA = new ClassName(); ClassName classB = new ClassName

java学习笔记10--泛型总结

java学习笔记系列: java学习笔记9--内部类总结 java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note10.html,转载

Java学习笔记_25_Collections类

25.Collections类: Collections类是一个工具类,用来对集合进行操作,它主要是提供一些排序算法,包括随机排序.反相排序等. Collections类提供了一些静态方法,实现了基于List容器的一些常用算法. Collections的一些方法列表: · void sort(List): 对List内的元素进行排序. · void shuffle(List): 对List内的元素随机排序. · void reverse(List): 对List内的元素进行逆序排列. · voi

Java学习笔记心得——初识Java

初识Java 拿到这本厚厚的<Java学习笔记>,翻开目录:Java平台概论.从JDK到TDE.认识对象.封装.继承与多态...看着这些似懂非懂的术语名词,心里怀着些好奇与担忧,就这样我开始走进Java的世界.  Java产生的历史 Java来自于Sun公司的一个叫Green Project中撰写的程序语言,全球信息网(World Wide Web)兴起,Java Applet成为网页互动技术的代表,特别适合于Internet应用程序开发. Java语言的特点 1.面向对象 这是Java最重要

java学习笔记8--接口总结

接着前面的学习: java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对象的初始化与回收 java学习笔记3--类与对象的基础 java学习笔记2--数据类型.数组 java学习笔记1--开发环境平台总结 本文地址:http://www.cnblogs.com/archimedes/p/java-study-note8.html,转载请注明源地址. 生活中的接口: 什么是接口? 一个Java接口是一些方法特

java学习笔记3——java关键字

java学习笔记3——java关键字 虽然老师说不用刻意的去记忆,但是我还是在网上找到了非常详细的注解,再次收藏 关键字的类型表: 各个关键字的详细注解和实例,按首字母排序: 1.abstract abstract 关键字可以修改类或方法. abstract 类可以扩展(增加子类),但不能直接实例化. abstract 方法不在声明它的类中实现,但必须在某个子类中重写. -示例- public abstract class MyClass{ } public abstract String my

java学习笔记一

只记录一些我认为比较必要,容易出错的地方.(不断更新中) 内存:分为四段,代码段code segment,数据段data segment,栈stack, 堆heap.记住如下图 数据类型: 1.java整形常量默认为int类型,当使用long类型时,因此需要添加“l”或“L”,一般用大写,小写像1.如long i = 888888888888L 2.浮点数时会默认为double类型,因此使用float时需要添加f.如 float i = 0.123f 3.java支持大数运算. 强制转换 flo