用户数据协议(UDP)是网络信息传输的另外一种形式, 基于UDP的通信不同于基于TCP的通信, 基于UDP的信息传递更快, 但是不提供可靠的保证. 使用UDP传输数据时, 用户无法知道数据能否正确地到达主机, 也不能确定到达目的地的顺序是否和发送的顺序相同. 虽然, UDP是一种不可靠的协议, 但如果需要较快地传输信息, 并能够容忍较小的错误, 可以考虑使用UDP.

  基于UDP通信的基本模式如下:

    1. 将数据打包(称为数据包), 然后将数据包发往目的地.

    2. 接收别人发来的数据包, 然后查看数据包.

  UDP程序步骤:

  发送数据包:

    1. 使用 DatagramSocket()创建一个数据包套接字.

    2. 使用 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)创建要发送的数据包.

    3. 使用 DatagramSocket类的 send()方法发送数据包.

  接收数据包:

    1. 使用 DatagramSocket(int port)创建数据包套接字, 绑定到指定端口.

    2. 使用 DatagramPacket(byte[] buf, int length)创建字节数组来接收数据包.

    3. 使用 DatagramPacket类的 receive()方法接收UDP包.

Demo_1:

Server 端:

import java.io.IOException;
import java.net.*;
public class TestUDPServer {
public static void main(String[] args) {
byte buf[] = new byte[1024];
try {
DatagramSocket ds = new DatagramSocket(5678);
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while(true){
try {
ds.receive(dp);
System.out.println(new String(buf,0,dp.getLength()));
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}

Client 端:

import java.io.IOException;
import java.net.*;
public class TestUDPClient {
public static void main(String[] args) {
byte[] buf = (new String("hello java")).getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("192.168.56.1", 5678));
DatagramSocket ds;
try {
ds = new DatagramSocket(9999);
try {
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
}
ds.close();
} catch (SocketException e) {
e.printStackTrace();
}
}
}

运行结果:

Demo_2:

Server 端:

import java.io.*;
import java.net.*;
public class UDPServer {
public static void main(String[] args) {
byte[] buf = new byte[1028];
try {
DatagramSocket ds = new DatagramSocket(5679);
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while(true){
try {
ds.receive(dp);
ByteArrayInputStream bais = new ByteArrayInputStream(buf);
DataInputStream dis = new DataInputStream(bais);
System.out.println(dis.readLong());
} catch (IOException e) {
e.printStackTrace();
}
}
} catch (SocketException e) {
e.printStackTrace();
}
}
}

Client 端:

import java.io.*;
import java.net.*;
public class UDPClient {
public static void main(String[] args) {
long n = 1089L;
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
try {
dos.writeLong(n);
byte[] buf = baos.toByteArray();
DatagramPacket dp = new DatagramPacket(buf, buf.length, new InetSocketAddress("192.168.56.1", 5679));
DatagramSocket ds = new DatagramSocket(9987);
ds.send(dp);
ds.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

运行结果:

Java中的网络编程-3的更多相关文章

  1. 第84节:Java中的网络编程(中)

    第84节:Java中的网络编程(中) 实现客户端和服务端的通信: 客户端需要的操作,创建socket,明确地址和端口,进行键盘录入,获取需要的数据,然后将录入的数据发送给服务端,为socket输出流, ...

  2. 第78节:Java中的网络编程(上)

    第78节:Java中的网络编程(上) 前言 网络编程涉及ip,端口,协议,tcp和udp的了解,和对socket通信的网络细节. 网络编程 OSI开放系统互连 网络编程指IO加网络 TCP/IP模型: ...

  3. 第62节:探索Java中的网络编程技术

    前言 感谢! 承蒙关照~ 探索Java中的网络编程技术 网络编程就是io技术和网络技术的结合,网络模型的定义,只要共用网络模型就可以两者连接.网络模型参考. 一座塔有七层,我们需要闯关. 第一层物理层 ...

  4. Java中的网络编程

    ​ Java中的网路编程主要是Java的Socket编程,属于JavaEE中的高级的部分,以下内容是对java网路编程的一个小结,代码都是经过编译调试的 C/S程序应用:客户/服务器模式,如QQ客户端 ...

  5. JAVA中-面向网络编程---单层交互

    面向网络编程---单层交互: 客户端说明: /* * 实现TCP客户端,链接到服务器 * 和服务器实现数据交互 * 实现TCP客户端的类 java.net.Scoket * 构造方法: * Socke ...

  6. Java中的网络编程-2

    Socket编程:(一般的网络编程) <1> 两个 JAVA 应用程序可通过一个双向的网络通信连接, 实现数据交换, 这个双向链路的一段称为一个 Socket. <2> Soc ...

  7. Java中的网络编程-1

    计算机网络:将分布在不同地区的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统, 从而使众多计算机 可以方便的互相传递信息, 共享硬件.软件.数据信息等资源. 计算机网络的主要功能: ...

  8. java第九节 网络编程的基础知识

    /** * * 网络编程的基础知识 * 网络协议与TCP/IP * IP地址和Port(端口号) * 本地回路的IP地址:127.0.0.1 * 端口号的范围为0-65535之间,0-1023之间的端 ...

  9. 读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

随机推荐

  1. php以数组做为配置文件的读取和写入操作

    最近想用php开发个简单的文章管理系统,主要是做一批垃圾采集站,目前网上的cms都太多功能了,导致修改个模板要很多文件,花费很多功夫.开始用thinkphp框架做,感觉还是麻烦,后来改用ci,做好了后 ...

  2. jdbc之Statement和Preparement

    Jdbc DML 操作 Statement:静态SQL操作 每次操作都会将sql语句提交到数据库执行一次,性能比较低 // 1.加载驱动程序 Class.forName(driverName); // ...

  3. Linux IO多路复用 poll

    Linux IO多路复用 poll 之前曾经提到过 select poll 跟select类似,poll改进了select的一个确定,就是poll没有监听上限 不过poll还是需要遍历以及频繁的把数组 ...

  4. kaggle之员工离职分析

    本文探讨的是kaggle中的一个案例-员工离职分析,从数据集中分析员工的离职原因,并发现其中的问题.数据主要包括影响员工离职的各种因素(工资.绩效.工作满意度.参加项目数.工作时长.是否升职.等)以及 ...

  5. 有关javaEE及WebGIS的一些地址

    jdk:https://www.oracle.com/index.html eclipse:https://www.eclipse.org spring:http://repo.springsourc ...

  6. 自己写的一些Excel及WordVBA函数[原创]

    1.将Excel当前工作表另存至桌面 Excel中有时一个工作簿中工作表特别多,需要快速单独存取其中一个,可用以下代码快速存至桌面 Sub 另存工作表到桌面() Dim sh As Worksheet ...

  7. Creating Isomorphic Apps with Node.js, React, and Express

    In this article, we’re going to use following software: React: the UI framework that can rendered on ...

  8. 20155224 2016-2017-2 《Java程序设计》第4周学习总结

    20155224 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 第六章主要学习了子类与父类的继承. 先定义一个程序,另一程序可继承他 如: publ ...

  9. 20155227 2016-2017-2 《Java程序设计》第二周学习总结

    20155227 2016-2017-2 <Java程序设计>第二周学习总结 教材学习内容总结 本周学习的第三章内容与以前学过的C语言有很多共通的地方,学习起来还是比较快的. 主要的内容有 ...

  10. 20155235 《Java程序设计》 实验二 Java面向对象程序设计

    20155235 <Java程序设计> 实验二 Java面向对象程序设计 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L ...