DatagramSocket例子「建议收藏」

DatagramSocket例子「建议收藏」在javaSE中,使用DatagramSocket进行的网络通信是基于UDP的。DatagramSocket类:表示发送和接收数据报包的套接字。数据报套接字是包投递服务的发送或接收点。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。构造方法:(多个只说一个)DatagramSocket(intport)创建数据报套接字并将其绑定到本…

大家好,又见面了,我是你们的朋友全栈君。

在javaSE中,使用DatagramSocket进行的网络通信是基于UDP的。

DatagramSocket类:

表示发送和接收数据报包的套接字。数据报套接字是包投递服务的发送或接收点。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

构造方法:(多个只说一个)

DatagramSocket(int port)
    创建数据报套接字并将其绑定到本地主机上的指定端口。

重要方法:

public void send(DatagramPacket p)    throws IOException
解释:从此套接字发送数据报包。DatagramPacket 包含的信息指示:将要发送的数据、其长度、远程主机的 IP 地址和远程主机的端口号。 如果存在安全管理器,且套接字当前没有连接到远程地址,则此方法首先执行某些安全性检查。

public void receive(DatagramPacket p)   throws IOException
解释:从此套接字接收数据报包。当此方法返回时,DatagramPacket的缓冲区填充了接收的数据。数据报包也包含发送方的IP地址和发送方机器上的端口号。
此方法在接收到数据报前一直阻塞。数据报包对象的 length 字段包含所接收信息的长度。如果信息比包的长度长,该信息将被截短。如果存在安全管理器,而安全管理器的 checkAccept方法不允许接收操作,则包不能被接收。

 

DatagramPacket类:

表示数据报包。数据报包用来实现无连接包投递服务。每条报文仅根据该包中包含的信息从一台机器路由到另一台机器。

构造方法:(有区分用于接收或发送的)

接受

DatagramPacket(byte[] buf, int length)
    构造 DatagramPacket,用来接收长度为 length 的数据包。

DatagramPacket(byte[] buf, int offset, int length)
    构造 DatagramPacket,用来接收长度为 length 的包,在缓冲区中指定了偏移量。

发送(多个只说一个)

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
    构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。

重要方法:

public byte[] getData()
返回数据缓冲区。接收到的或将要发送的数据从缓冲区中的偏移量 offset 处开始,持续length长度。

 

如何通信:

发送方工作过程步骤:

  1. 创建DatagramSocket(可以设置本地端口,或由系统分配)
  2. 创建用于发送的DatagramPacket(主要设置发送的数据、远程地址和端口等信息)
  3. 通过DatagramSocket发送DatagramPacket(调用send方法)
  4. 关闭DatagramSocket

接收方工作过程步骤:

  1. 创建DatagramSocket(主要设置本地地址和端口等信息)
  2. 创建用于接受的DatagramPacket(不需要设置地址和端口)
  3. 通过DatagramSocket接收发送方信息,填充DatagramPacket(调用receive方法)
  4. 读取DatagramPacket的数据(调用getData方法)
  5. 关闭DatagramSocket

例子

发送方代码:

DatagramSocket例子「建议收藏」
DatagramSocket例子「建议收藏」
View Code

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class Sender {

    public static void main(String[] args) throws Exception {
        DatagramSocket sender = new DatagramSocket();// 1、创建DatagramSocket(可以设置本地端口,或由系统分配)
        String msg = "你好!";
        byte[] buf = msg.getBytes();
        DatagramPacket packet = new DatagramPacket(buf, buf.length,
                InetAddress.getByName("127.0.0.1"), 10000);// 2、创建用于发送的DatagramPacket(主要设置发送的数据、远程地址和端口等信息)
        System.out.println("sender:发送信息----" + msg);
        sender.send(packet);// 3、通过DatagramSocket发送DatagramPacket
        System.out.println("sender:已经发送了信息");
        sender.close();// 4、关闭DatagramSocket
    }

}

 

接收方代码:

DatagramSocket例子「建议收藏」
DatagramSocket例子「建议收藏」
View Code

 1 import java.net.DatagramPacket;
 2 import java.net.DatagramSocket;
 3 
 4 public class Receiver {
 5 
 6     public static void main(String[] args) throws Exception {
 7         DatagramSocket receiver = new DatagramSocket(10000);// 1、创建DatagramSocket(主要设置本地地址和端口等信息)
 8         byte[] buf = new byte[1024];
 9         DatagramPacket packet = new DatagramPacket(buf, buf.length);// 2、创建用于接受的DatagramPacket(不需要设置地址和端口)
10         System.out.println("receiver:等待接收");
11         receiver.receive(packet);// 3、通过DatagramSocket接受发送方信息,填充DatagramPacket
12         String msg = new String(packet.getData(), 0, packet.getLength());// 4、读取DatagramPacket的数据
13         System.out.println("receiver:得到的信息是:-----" + msg);
14         receiver.close();// 5、关闭DatagramSocket
15     }
16 
17 }

 

转载于:https://www.cnblogs.com/dann/archive/2012/10/28/2743884.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/133481.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月8日 下午9:00
下一篇 2022年6月8日 下午9:36


相关推荐

  • 解决VMware Tools安装不了的问题

    解决VMware Tools安装不了的问题在使用VMwareWorkstation时遇到了VMwareTools不能安装的问题,具体表现为:在要安装VMwareTools的虚拟机上右键—-》安装VMwareTools(T)…为灰色,不能够点击。

    2022年5月25日
    37
  • 揭秘Hello-Agents多智能体协调算法:任务分配与负载均衡的完美实现

    揭秘Hello-Agents多智能体协调算法:任务分配与负载均衡的完美实现

    2026年3月16日
    3
  • chrome添加扩展程序无效_vue兼容性问题

    chrome添加扩展程序无效_vue兼容性问题chrome扩展程序中以编程方式插入内容脚本不生效的问题

    2022年4月20日
    58
  • edgeR基因表达差异分析

    edgeR基因表达差异分析edgeR 基因表达差异分析文章目录 edgeR 基因表达差异分析官方文档总结读取 read 数 DGEList 对象 构建分组过滤 删除低表达基因 CPM 标度转换手动过滤自动过滤归一化测序深度有效库大小 GC 含量基因长度 MDS 图形展示样本无监督聚类负二项式模型计算生物变异系数计算差异基因广义线性模型 Glm 计算离散度计算 DE 基因如果没有重复样本 输出结果查看统计参考 一个比较详细的例子 http www iwhgao com edger E7 AE 80 E5 8D 95 E4 BD BF E7 94 A8

    2026年3月19日
    3
  • 魔兽世界WOW服务器端的模拟器【2010】[通俗易懂]

    记不清从什么时候开始,国内出现了很多所谓的魔兽世界私服网站,而且在淘宝上还有什么魔兽世界单机版在出售,其实这些东西都是利用国外的一些开源软件如MaNGOS和ArcEmu来实现的。一、MaNGOS http://getmangos.com/MaNGOS不是一个魔兽私服模拟器(wowemu),它是一个开源的自由软件项目,是用c++和C#编程语言实现的一个支持大型多人在线角色扮演游戏服务

    2022年4月15日
    267
  • 成为一名CV(计算机视觉)工程师,你需要具备哪些能力?[通俗易懂]

    成为一名CV(计算机视觉)工程师,你需要具备哪些能力?[通俗易懂]2019年国家对人工智能加大了支持力度,媒体对人工智能的资讯报道也越来越多,刚刚结束的人工智能大会也展示了国内现在的人工智能的发展状况,“双马”对话中也处处透露出对人工智能的美好展望。人工智能一个很大的应用方向是CV(计算机视觉)。CV在如制造业、检验、文档分析、医疗诊断和军事等领域中各种智能系统中不可分割。具体的像无人驾驶、人脸识别、VR/AR等,未来在医疗领域等还将有更大的发展。那么成为一名计算机视觉工程师应该具备哪些能力呢?首先数学要学好。大学里开过的高数、线性代数、概率统计等课都十分

    2022年4月20日
    89

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号