TCP/IP UDP都是基于传输层的;而udp发送数据会出现丢包的情况,发送一个数据不管对方接收不接收,发送过去就完事了;

udp的特点:将数据源和目的封装成数据包中,不要建立连接;(DatagramPacket)

每个数据报的大小在限制64K以内

因无连接,是不可靠协议

不需要建立连接,速度快;

下面将编写一代代码展现UDP

一、client 端

  

public class UDPSocketClient {

    public static void main(String[] args) throws Throwable {

            //send();

            keySend();

    }

    private static void keySend() throws Throwable {

        try {

            //1、创建UDP服务
DatagramSocket socket=new DatagramSocket(); BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); String message=null; while((message=reader.readLine())!=null) { if(message.equals("886")) break; //2、 封装数据包
DatagramPacket send=new DatagramPacket(message.getBytes(),message.getBytes().length,InetAddress.getByName("localhost"), 8088);
//阻塞式 3、发送数据
socket.send(send);
}
//4、释放资源
socket.close(); } catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }

二、SERVER端

public class UDPSocketServer {

    public static void main(String[] args) throws Throwable {
//receive();
Keyreceive();
} private static void Keyreceive() throws Throwable { //1、创建udp socket并指定端口
DatagramSocket socket = new DatagramSocket(8088); while(true) {
//2、定义数据 要接收的报文
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
socket.receive(packet);//阻塞式
String message=new String(packet.getData(),0,packet.getData().length);
System.out.println("Server收到的消息为:"+message);
} }
}

三、测试结果;

先把server端启动,然后开启client

客户端发送消息

服务端接收消息

 多线程进行聊天

一、客户端

public class UDPSocketClientThread implements Runnable{

    private DatagramSocket  datagramSocket;
public UDPSocketClientThread(DatagramSocket datagramSocket) {
this.datagramSocket=datagramSocket;
} @Override
public void run() { BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); String message=null; try {
while((message=reader.readLine())!=null) { if(message.equals("886")) break; //2、发送数据
DatagramPacket send=new DatagramPacket(message.getBytes(),message.getBytes().length,InetAddress.getByName("192.168.43.255"), 8088);
//阻塞式
this.datagramSocket.send(send);
}
} catch (UnknownHostException e) { e.printStackTrace();
} catch (IOException e) { e.printStackTrace();
}
} }

二、服务端

public class UDPSocketServerThread implements Runnable{

    DatagramSocket socket;

    public UDPSocketServerThread(DatagramSocket socket) {
this.socket=socket;
} @Override
public void run() { while(true) {
//2、定义数据 要接收的报文
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes, bytes.length);
try {
socket.receive(packet);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//阻塞式
String message=new String(packet.getData(),0,packet.getData().length);
InetAddress inetAddress=null;
try {
inetAddress = InetAddress.getLocalHost();
System.out.println(inetAddress.getHostAddress()+"的消息为:"+message);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} } } }

三、测试运行

public class UDPSocketRun {

    public static void main(String[] args) throws Throwable {
DatagramSocket send=new DatagramSocket();
DatagramSocket receive=new DatagramSocket(8088);
new Thread(new UDPSocketClientThread(send)).start();
new Thread(new UDPSocketServerThread(receive)).start();
}
}

java-udp编程的更多相关文章

  1. Java UDP 编程

    1.客户端代码 1 import java.io.IOException; 2 import java.net.DatagramPacket; 3 import java.net.DatagramSo ...

  2. Java UDP网络编程 - 最简单示例

    UDP也是网络通讯中的一个重要协议,与TCP区别可参见浅谈TCP/IP 和 UDP的区别,本文就对Java UDP通讯做一个简单例子介绍 服务端: package wyf; import java.i ...

  3. java 网络编程-tcp/udp

    --转自:http://blog.csdn.net/nyzhl/article/details/1705039 直接把代码写在这里,解释看这里吧:http://blog.csdn.net/nyzhl/ ...

  4. 牛客网Java刷题知识点之TCP、UDP、TCP和UDP的区别、socket、TCP编程的客户端一般步骤、TCP编程的服务器端一般步骤、UDP编程的客户端一般步骤、UDP编程的服务器端一般步骤

    福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑         Java全栈大联盟   ...

  5. Java网络编程UDP通信原理

    前言 继续今天我们的Java网络编程--TCP和UDP通信 一.TCP和UDP概述 传输层通常以TCP和UDP协议来控制端点与端点的通信   TCP UDP 协议名称 传输控制协议 用户数据包协议 是 ...

  6. java socket编程(li)

    一.网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输.在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以 ...

  7. Java 网络编程学习总结

    新手一枚,Java学习中,把自己学习网络编程的知识总结一下,梳理下知识,方便日后查阅,高手莫进. 本文的主要内容: [1]    网络编程认识                [2]  TCP/IP编程 ...

  8. java socket编程(网络编程)

    一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输. 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可 ...

  9. Java Socket编程

    Java最初是作为网络编程语言出现的,其对网络提供了高度的支持,使得客户端和服务器的沟通变成了现实,而在网络编程中,使用最多的就是Socket.像大家熟悉的QQ.MSN都使用了Socket相关的技术. ...

  10. Java Socket编程题库

    一.    填空题 ___ IP地址____用来标志网络中的一个通信实体的地址.通信实体可以是计算机,路由器等. 统一资源定位符URL是指向互联网"资源"的指针,由4部分组成:协议 ...

随机推荐

  1. DP经典问题—————(LCIS)最长公共上升子序列

    这道题是LIS(最长上升子序列)与LCS(最长公共子序列)问题的综合版本,有关这两个问题可以看一下我的文章:https://www.cnblogs.com/myhnb/p/11305551.html ...

  2. 2019-2020 ICPC, Asia Jakarta Regional Contest A. Copying Homework

    Danang and Darto are classmates. They are given homework to create a permutation of N integers from  ...

  3. web题-自己做的

    @sqlmap工具注入 sql基础教程https://jingyan.baidu.com/article/eae078276530621fec5485b9.html 最后啥都有了查询flag表的fla ...

  4. sql回显注入(满满的干货)

    三种注入poc where user_id = 1 or 1=1 where user_id = '1' or '1'='1' where user_id =" 1 "or &qu ...

  5. 《ThinkPHP 5.0快速入门》 请求和响应

    1.请求对象 //传统调用$request = Request::instance();//实例化对象 $request->url();//获取当前的域名 //继承think\Controlle ...

  6. Python之数据库

    Python之数据库: 1. Mysql 2. pymysql 3. SQLAlchemy Mysql 一.概述 什么是数据库 ? 答:数据的仓库,如:在ATM的示例中我们创建了一个 db 目录,称其 ...

  7. Redis(1.13)Redis cluster 分布式集群手动配置

    [1]试验环境 结构图如下: (这里试验没有那么多机器,就用3台机器搭建试验) redis1是redis集群的一个节点A,上面运行了两个redis实例,7001 7004 redis2是redis集群 ...

  8. table表格整体居中 和 table表格中各行各列内容居中

    1.table表格整个居中<div style="text-align: center;"> <table border="1" style= ...

  9. MySql 中锁的定义

    行级锁,一般是指排它锁,即被锁定行不可进行修改,删除,只可以被其他会话select.行级锁之前需要先加表结构共享锁. 表级锁,一般是指表结构共享锁锁,是不可对该表执行DDL操作,但对DML操作都不限制 ...

  10. hdu 5651 重复全排列+逆元

    知识点: n个元素,其中a1,a2,····,an互不相同,进行全排列,可得n!个不同的排列. 若其中某一元素ai重复了ni次,全排列出来必有重复元素,其中真正不同的排列数应为 ,即其重复度为ni! ...