UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。(无连接、封包、大小限制、速度快)。

一、UDP协议的特点:

  1. 将数据及源和目的地封装成数据包中,不需要建立连接。
  2. 每个数据报的大小限制在64K内
  3. 因无连接,是不可靠协议。
  4. 不需要建立连接,速度快。

二、通俗解释:

面向无连接的,你在与不在我都在发。就像邮局寄包裹,比如寄饼干。
,邮局会给你一个盒子和胶带,你将饼干封上(封包),将数据达成数据包,打完之后,贴张地址(天堂街)、门牌号(地狱门18号)(地址、端口),但地址可能不存在,那么则丢弃。

三、UDP举例:

  步话机、FEIQ、网络会议、录屏传播、聊天。

四、socket(套接字):

Socket就是为网络服务提供的一种机制。
通信的两端都有Socket。(插座,初期可简单理解为应用程序,而非网卡接口)
网络通信其实就是Socket通信。
数据在两个Socket间通过IO传输。

五、发送端:

需求:通过Udp传输的方式,将一段文字数据发送出去。
定义了一个udp的接收端。
思路:
1、建立udpSocket服务(找邮局)
2、提供数据,将数据封装到数据包中(封包、写地址)
3、通过socket服务发送功能,将数据包发送出去。(包裹上路)
4、关闭资源。

 class UdpSend
{
public static void main(String[] args) throws Exception
{
//1、创建udpSocket服务。通过DatagramSocket对象
DatagramSocket ds=new DatagramSocket(8888); //2、确定数据,并封装数据包
byte[] buf="udp I coming".getBytes(); /*
InetAddress addr=InetAddress.getLocalHost();
InetAddress addr = InetAddress.getByName(null);
InetAddress.getByName("localhost");
InetAddress.getByName("127.0.0.1");
*/
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.102"),10000); //3、通过socket服务,将已有的数据包发送出去,通过send方法
ds.send(dp); //4、关闭资源
ds.close();
}
}

发送端程序代码(class UdpSend )

 六、接收端:

需求:定义一个应用程序,用于接收udp协议传输的数据并处理
定义udp的接收端。
思路:
1、定义udpSocket服务。通常会监听一个端口。 其实就是给这个接收网络应用程序定义一个数字标识,
方便于明确哪些数据过来,该应用程序可以处理。
2、定义一个数据包。因为要存储接收到的字节数据。
数据包对象中有更多功能可以提取字节数据中的不同数据信息。
3、通过socket服务端额receive方法将收到的数据存入已定义的数据包中
4、通过手机开那片对象的特有功能,将这些不同数据取出打印在控制台上。
5、关闭资源

 class UdpReceive
{
public static void main(String[] agrs) throws Exception
{
//1、创建udpsocket,建立端点
DatagramSocket ds=new DatagramSocket(10000); //2、定义数据包,用于存储数据
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length); //3、通过receive方法将收到的数据存到数据包 中
ds.receive(dp);//阻塞式方法,线程机制,wait了 //通过数据包的方法获取其中的数据
String ip=dp.getAddress().getHostAddress();//获取发送端IP地址
String data=new String(dp.getData(),0,dp.getLength());//获取数据
int port=dp.getPort();//获取发送端端口 System.out.println(ip+"::"+data+"::"+port);//信息打印控制台 //5、关闭资源
ds.close();
}
}

接收端程序代码(class UdpReceive)

运行截图:

  

七、在接收者与发送者之间的改进

承接UdpDemo.java,实现只能一个人发,一个人收。
1、实现键盘录入:
2、实现连续输入(while)

 import java.net.*;
import java.io.*; class UdpSend2
{
public static void main(String[] args) throws Exception
{
DatagramSocket ds=new DatagramSocket(); //实现键盘录入
BufferedReader bufr=
new BufferedReader(new InputStreamReader(System.in));
String line=null; while ((line=bufr.readLine())!=null)
{
if ("886".equals(line))
break;
byte[] buf=line.getBytes(); //IP地址,暂且用本机IP地址,也可用广播地址192.168.1.255
DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.102"),10001); ds.send(dp);
}
ds.close();
}
} class UdpReceive2
{
public static void main(String[] agrs) throws Exception
{
DatagramSocket ds=new DatagramSocket(10001); byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf,buf.length); while (true)
{
ds.receive(dp);//阻塞式方法,线程机制,wait了 String ip=dp.getAddress().getHostAddress();//获取发送端IP地址
String data=new String(dp.getData(),0,dp.getLength());//获取数据
int port=dp.getPort();//获取发送端端口 System.out.println(ip+"::"+data+"::"+port);//信息打印控制台
} //ds.close();服务器一般不关,也有种方法,while判断条件关
}
}

发送端+接收端Code

  运行截图:

通过套接字(socket)和UDP协议实现网络通信的更多相关文章

  1. day29 python 套接字socket TCP udp 形式发送信息的区别

    我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在 ...

  2. 网络编程 套接字socket TCP UDP

    网络编程与套接字 网络编程 网络编程是什么: ​ 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 ​ 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...

  3. 数据包式套接字:基于UDP协议的Socket网络编程

    步骤: 1.利用DatagramPacket封装数据包: 2.利用DatagramSocket发送数据包: 3.利用DatagramSocket接收数据包: 4.利用DatagramPacket处理数 ...

  4. 5-8套接字socket

    socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协 ...

  5. python 套接字Socket详解

    socket简介 1. 什么是socket ? socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是: 它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多 ...

  6. Socket(套接字) IP TCP UDP HTTP

    Socket(套接字) 阮老师的微博 (转)什么是套接字(Socket)? 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进 ...

  7. 计算机网络之传输层(传输层提供的服务及功能概述、端口、套接字--Socket、无连接UDP和面向连接TCP服务)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105451022 学习课程:<2019王道考研计算机网络> 学习目的 ...

  8. 网络编程(二)--TCP协议、基于tcp协议的套接字socket

    一.TCP协议(Transmission Control Protocol 传输控制协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会 ...

  9. 网络编程(二)——TCP协议、基于tcp协议的套接字socket

    TCP协议与基于tcp协议的套接字socket 一.TCP协议(流式协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的 ...

  10. Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()

    前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...

随机推荐

  1. centOS7安装RabbitMQ及python实例

    1.rabbitmq是有erlang开发的,所以首先要先安装erlang rpm -ivh erlang-18.1-1.el7.centos.x86_64.rpm rpm -ivh rabbitmq- ...

  2. Delphi中array of const应用

    Delphi的Format函数大家都用得很多,第二个参数用着确实很方便.最近在数据库开发应用中需要自己创建一个带array of const参数的函数,对于常用的类型String,Integer,Po ...

  3. shader之旅-7-平面阴影(planar shadow)

    根据<real-time shadow>这本书第二章中的推导,实现了最简单的阴影技术. planar shadow通过一个投影矩阵将被灯光照射的物体的顶点沿着光线方向投影到接受阴影的平面. ...

  4. Http调试工具-Fiddler使用指引

    转自:http://my.oschina.net/u/1388024/blog/186886#OSC_h1_9 目录[-] Fiddler是什么? Fiddler能做什么? 从哪里下载? 安装: 初次 ...

  5. 简洁方便的集合处理——Java 8 stream流

    背景 java 8已经发行好几年了,前段时间java 12也已经问世,但平时的工作中,很多项目的环境还停留在java1.7中.而且java8的很多新特性都是革命性的,比如各种集合的优化.lambda表 ...

  6. 智能路由器开发指南_book

    最近购得一个openwrt书籍<智能路由器开发指南>,作者张永智. Building a smart router with openwrt 作者网址:http://openwrt.bjb ...

  7. args *args **kwargs区别

    python 函数中的参数类型有两种,分别为 位置参数和关键字参数: 一 .位置参数(该类参数位置固定不变) args:     表示默认位置参数,该参数是具象的,有多少个参数就传递多少参数,且参数位 ...

  8. centos 7 安装 mail

    yum install -y sendmail 将下面内容粘贴到/etc/mail.rc中 set ssl-verify=ignore set nss-config-dir=/root/.certs ...

  9. 【ubantu】在Ubuntu上安装tar.gz,tar.bz以及deb文件(例:libreoffice安装)

    参考文章: https://blog.csdn.net/zhuquan945/article/details/52986712 ==================================== ...

  10. mysql 考勤表异常 【待修改】

    有考勤刷卡记录表,表名为attendance ,有如下字段: 姓名 卡号 刷卡时间 刷卡类型 name id time type    张三 59775623 2010-04-01 07:23:37  ...