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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • php .asmx,php实现通过soap调用.Net的WebService asmx文件

    php .asmx,php实现通过soap调用.Net的WebService asmx文件本文实例讲述了php实现通过soap调用.Net的WebServiceasmx文件。分享给大家供大家参考,具体如下:最近,帮一个同行测试用.net写的WebService接口,C#调用通过,现在需要测试一下php版本对它的调用,经过各种探索,相关的PHP调用webservice的过程如下:1.打开php相关扩展:找到配置文件php.ini文件,打开以下扩展extension=php_so…

  • jquery获取cookie值的方法_vue获取cookie的值

    jquery获取cookie值的方法_vue获取cookie的值cookie有四个不同的属性: 名称,内容,域,路径 代码如下复制代码$.cookie(‘the_cookie’);//读取cookie $.cookie(‘the_cookie’,’the_value’);//存储cookie $.cookie(‘the_cookie’,’the_value’,{expires:7});

    2022年10月22日
  • matlab之simulink仿真入门

    matlab之simulink仿真入门MatlabSimulink仿真工具的应用****Simulink是一个用来对动态系统进行建模、仿真和分析的软件包。使用Simulink来建模、分析和仿真各种动态系统(包括连续系统、离散系统和混合系统),将是一件非常轻松的事情。它提供了一种图形化的交互环境,只需用鼠标拖动的方法便能迅速地建立起系统框图模型,甚至不需要编写一行代码。由于Simulink具有强大的功能与友好的用户界面,因此它已

  • linux系统查看网卡是否开启,查看Linux下网卡状态或 是否连接

    linux系统查看网卡是否开启,查看Linux下网卡状态或 是否连接1)通过mii-tool指令[root@localhostroot]#mii-tooleth0:negotiated100baseTx-FD,linkoketh1:nolink或[root@localhostroot]#mii-tool-veth0:negotiated100baseTx-FD,linkokproductinfo:vendor00:50:43,…

    2022年10月18日
  • vscode 使用flake8和yapf[通俗易懂]

    vscode 使用flake8和yapf[通俗易懂]vscode使用flake8和yapf

  • python开发h5页面_大数据和python有关吗

    python开发h5页面_大数据和python有关吗文章目录前言HDF与h5简介数据组织方式HDFView下载与安装在WIN10系统安装后打开出现黑框闪退的解决方法python对h5文件的操作批量制作h5文件h5文件的提取,另存为nii文件前言一般来说,深度学习的训练数据和训练后的参数都会保存为h5格式文件,对于训练数据来说,深度学习中当训练大量数据时,如果从硬盘中加载再预处理,再传递进网络,这是一个非常耗时的过程。其中从硬盘中读取图片会花费大量时间,更可行在方法是将其存在单个文件中,如h5文件。那么h5文件对于深度学习训练具有什么优势呢?可以支持

发表回复

您的电子邮箱地址不会被公开。

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