通过套接字(socket)和UDP协议实现网络通信
UDP---用户数据报协议,是一个简单的面向数据报的运输层协议。(无连接、封包、大小限制、速度快)。
一、UDP协议的特点:
- 将数据及源和目的地封装成数据包中,不需要建立连接。
- 每个数据报的大小限制在64K内
- 因无连接,是不可靠协议。
- 不需要建立连接,速度快。
二、通俗解释:
面向无连接的,你在与不在我都在发。就像邮局寄包裹,比如寄饼干。
,邮局会给你一个盒子和胶带,你将饼干封上(封包),将数据达成数据包,打完之后,贴张地址(天堂街)、门牌号(地狱门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协议实现网络通信的更多相关文章
- day29 python 套接字socket TCP udp 形式发送信息的区别
我们经常把socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在 ...
- 网络编程 套接字socket TCP UDP
网络编程与套接字 网络编程 网络编程是什么: 网络通常指的是计算机中的互联网,是由多台计算机通过网线或其他媒介相互链接组成的 编写基于网络的应用程序的过程序称之为网络编程. 网络编程最主要的工 ...
- 数据包式套接字:基于UDP协议的Socket网络编程
步骤: 1.利用DatagramPacket封装数据包: 2.利用DatagramSocket发送数据包: 3.利用DatagramSocket接收数据包: 4.利用DatagramPacket处理数 ...
- 5-8套接字socket
socket概念 socket层 理解socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协 ...
- python 套接字Socket详解
socket简介 1. 什么是socket ? socket(简称 套接字) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是: 它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多 ...
- Socket(套接字) IP TCP UDP HTTP
Socket(套接字) 阮老师的微博 (转)什么是套接字(Socket)? 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进 ...
- 计算机网络之传输层(传输层提供的服务及功能概述、端口、套接字--Socket、无连接UDP和面向连接TCP服务)
文章转自:https://blog.csdn.net/weixin_43914604/article/details/105451022 学习课程:<2019王道考研计算机网络> 学习目的 ...
- 网络编程(二)--TCP协议、基于tcp协议的套接字socket
一.TCP协议(Transmission Control Protocol 传输控制协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会 ...
- 网络编程(二)——TCP协议、基于tcp协议的套接字socket
TCP协议与基于tcp协议的套接字socket 一.TCP协议(流式协议) 1.可靠传输,TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的 ...
- Linux进程间通信(八):流套接字 socket()、bind()、listen()、accept()、connect()、read()、write()、close()
前面说到的进程间的通信,所通信的进程都是在同一台计算机上的,而使用socket进行通信的进程可以是同一台计算机的进程,也是可以是通过网络连接起来的不同计算机上的进程.通常我们使用socket进行网络编 ...
随机推荐
- @Autowired @Transaction @Service同时出现。
对于@Autowired,如果只写这些,肯定是根据类型自动装配这个没问题. @Service public class AcRoleServiceImpl implements AcRoleServi ...
- Linux如何查看进程、杀死进程、查看端口等常用命令
查看进程号 1.ps 命令用于查看当前正在运行的进程.grep 是搜索 例如: ps -ef | grep java表示查看所有进程里 CMD 是 java 的进程信息2.ps -aux | grep ...
- HTML5+CSS3学习笔记(一) 概述
HTML5+CSS3概述 HTML5和CSS3不仅仅是两项新的Web技术标准,更代表了下一代HTML和CSS技术.虽然HTML5的标准规范还没有正式发布,但是未来的发展前景已经可以预见,那就 ...
- Socket协议通讯
Socket协议通讯 服务器端代码: using System; using System.Collections.Generic; using System.ComponentModel; us ...
- 关于Android项目中的分层,参考eoecn开源项目(8.29)
以下为eoecn开源项目的分层情况: ├ cn.eoe.app --存放程序全局性类的包├ cn.eoe.app.adapter --存放适配器的实现类的包 ├ cn.eoe.app.adapter. ...
- elk升级文档
1.kibana等都统一版本了,5.4版本的kibana要5.4版本的elasticsearch 2.现有架构: logstash logstash读取日志-------->内网redis做队列 ...
- Android加入新的视频格式--媒体库扫描
需求:在mediaprovider数据库中加入.mov后缀格式的视频文件 能够使用工具MediaInfo_GUI_0.7.67_Windows.3243836749.exe 查看mov文件编码格式类型 ...
- asp.net repeater Container.ItemIndex
<asp:Repeater ID="myRepeater" runat="server"> <HeaderTemplate> <t ...
- 交换两个变量的值不使用第三个变量(Java)
关于这个问题网上有好多答案,最近有人说这是个奇葩问题 个人测试了一把,如果是普通的数字的话,基本上没有问题 public static void main(String[] args) { int a ...
- RocketMQ 4.3正式发布,支持分布式事务
冯嘉 作者 | 冯嘉 近日,Apache RocketMQ 4.3 版本宣布发布,此次发布不仅包括提升性能,减少内存使用等原有特性增强,还修复了部分社区提出的若干问题,更重要的是该版本开源了社 ...