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. Oracle 隐式游标 存储过程

    --隐式游标 注意变量赋值用(:=) 连接符用(||)而不是加号(+) DECLARE v_pk T_PLAT_KEYWORD.ID%TYPE; --主键 v_amount_message T_PLA ...

  2. java中替换双引号 Java问题通用解决代码 Java问题通用解决代码

    http://blog.csdn.net/newhappy2008/article/details/4785263 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...

  3. XCode5无法设置Deployment Target的解决办法

    今天使用XCode5创建新项目的时候发现无法修改Deployment Target,只能选择iOS7,谷歌了一下找到了答案,在这里分享给大家:) 这是由于XCode5默认会选择在64位的环境下运行,在 ...

  4. LBS 附近的人

    1 http://www.infoq.com/cn/articles/depth-study-of-Symfony2 2 http://lbsyun.baidu.com/

  5. Hibernate学习之类级别注解

    © 版权声明:本文为博主原创文章,转载请注明出处 类级别注解: 1. @Entity 实体:表示映射实体类,使用@Entity时必须指定实体类的主键属性 @Entity(name="&quo ...

  6. An error occurred while searching for implementations of method

    1:在我安装完scala的插件后,在打开方法的实现类(open implementactions)的时候,抛出这个异常,后来发现这个异常是因为我的scala的插件跟我eclipse版本不兼容导致的. ...

  7. hbase的数据模型

    hbase类似bigTable是一个分布式的数据库,它是一个稀疏的,长期存储的,多维的,排序的映射表,这张表的索引是行关键字,列关键字,时间戳.hbase中的数据都是字符串,没有类型.         ...

  8. hdu - 5033 - Building(单调栈)

    题意:N 幢楼排成一列(1<=N<=10^5),各楼有横坐标 xi(1<=xi<=10^7) 以及高度 hi(1<=hi<=10^7),在各楼之间的Q个位置(1&l ...

  9. C语言中的main函数以及main函数是如何被调用的

    main函数是C语言中比较特殊的函数,C程序总是从main函数开始执行,main函数的原型是: int main(int argc, char *argv[]); 其中argc是命令行参数的个数,ar ...

  10. 微软2016校园招聘在线笔试第二场 题目1 : Lucky Substrings

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 A string s is LUCKY if and only if the number of different ch ...