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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 招聘 | 深圳市人工智能与机器人研究院AIRS 特种机器人研究中心

    招聘 | 深圳市人工智能与机器人研究院AIRS 特种机器人研究中心

    2020年11月14日
    220
  • datagrip激活码2021【注册码】

    datagrip激活码2021【注册码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
    87
  • Android获取短信验证码并自动填充的两种方式「建议收藏」

    Android获取短信验证码并自动填充的两种方式「建议收藏」有些项目为了方便客户操作,减去客户输入短信验证码的时间,会要求安卓app能够获取收到的短信验证码并自动填充到输入框。所以,我整理了安卓获取短信验证码并自动填充输入框的两种方法,而且正式在项目中使用并无bug。      一:监听短信库的变化,获取收到的短信内容,并通过正则表达式取出数字验证码填充到输入框中。代码如下:      publicclassObtainSmsVerifyC

    2022年7月25日
    89
  • laravel 常用文档

    laravel 常用文档

    2021年10月22日
    44
  • esp-idf的内存管理——tlsf算法

    esp-idf的内存管理——tlsf算法目录1最初还不是tlsf2为什么要引入tlsf3idf中使用的tlsf算法的设计与实现4源码走读参考1最初还不是tlsf2为什么要引入tlsf3idf中使用的tlsf算法的设计与实现4源码走读参考[1]半文钱的博客[2]upstream所在的github地址注意事项放到内存调试去说:用户需要关注的:内存的硬件特性(caps)内存的访问速度内存是否支持原子操作内存是否可以由CPU直接访问用户在使用时:用户自己也要对自己的应用需要使用的内存做一些安排,有的内存比

    2022年6月29日
    24
  • 隶属度函数模板_高斯隶属度函数

    隶属度函数模板_高斯隶属度函数模糊隶属度函数划分等级根据国家对信号交叉路口的评价标准,对交通状况分为4个等级,分别为Ⅰ级舒适畅通、Ⅱ级接近饱和、Ⅲ级常呈混乱、Ⅳ级阻塞。因此选用4个等级的模糊隶属度函数。分别为:某时段交通状况对Ⅰ级路况的隶属度函数:        某时段交通状况对Ⅱ级路况的隶属度函数:        某时段交通状况对Ⅲ级路况的隶属度函数:        某时段交通状况对Ⅳ级

    2025年7月27日
    7

发表回复

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

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