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


相关推荐

  • Vue生成二维码_vue实现扫描二维码

    Vue生成二维码_vue实现扫描二维码效果代码npminstallvue-qr–save<template><divclass=”sg-qrcode”><vue-qr:text=”qrcodeText”:correctLevel=”3″:size=”250″:margin=”10″colorDark=”#2ba245″

    2022年10月3日
    3
  • 【c#】控制台程序编写计时器「建议收藏」

    【c#】控制台程序编写计时器「建议收藏」【c#】控制台程序编写计时器

    2022年4月25日
    56
  • 有哪些域名可以提交备案

    有哪些域名可以提交备案

    2021年9月21日
    89
  • linux export命令找不到_docker执行容器内的shell

    linux export命令找不到_docker执行容器内的shellLinuxexport命令用于设置或显示环境变量。在shell中执行程序时,shell会提供一组环境变量。export可新增,修改或删除环境变量,供后续执行的程序使用。export的效力仅及于该次登陆操作。语法export[-fnp][变量名称]=[变量设置值]参数说明:-f 代表[变量名称]中为函数名称。 -n 删除指定的变量。变量实际上并未删除,只是不会输出到后…

    2025年9月29日
    5
  • c语言中的assert函数_assert函数用法

    c语言中的assert函数_assert函数用法一、 简介assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行。原型定义:#include <assert.h>void assert( int expression );assert的作用是先计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abort 来…

    2022年8月18日
    6
  • 2018,我的这一年

    这一年是和自己对话的一年,是矛盾的一年,是抑郁的一年。时间过的很快,2018已经过去很多天了,是时候对过去的这一年进行一个简单的总结了,不管这一年过的如何,在时间的巨轮下,一切都成为过往,成为了生命中的一段经历,若干年后这一段经历或许只剩下一些碎片的回忆,那也没有关系,顺其自然即可! 泰戈尔曾说过:”天空没留下翅膀的痕迹,但我已飞过“。虽然多年之后记忆中很多事情没有了痕迹,但那些事情的确曾经…

    2022年2月27日
    48

发表回复

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

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