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)


相关推荐

  • 使用instsrv.exe+srvany.exe将应用程序安装为windows服务的方法

    使用instsrv.exe+srvany.exe将应用程序安装为windows服务的方法一、什么是instsrv.exe和srvany.exeinstsrv.exe.exe和srvany.exe是MicrosoftWindowsResourceKits工具集中的两个实用工具,这两个工具配合使用可以将任何的exe应用程序作为window服务运行。srany.exe是注册程序的服务外壳,可以通过它让应用程序以system账号启动,可以使应用程序作为windows的服务随机器启动而自动启动,从而隐藏不必要的窗口,例如:应用程序控制台等。那么我们肯定想是不是安装srvany.exe就可以完成

  • Mount NTFS Partitions

    Mount NTFS PartitionsMountNTFSPartitions18January2007Windowsusesadifferentfilesystem(NTFS)tostorefiles.InorderforFedoratoreadthatfilesystem,yourequireNTFSsupportinyourkernel.Youcaneither

  • python实现求和,求平均值——函数[通俗易懂]

    python实现求和,求平均值——函数[通俗易懂]#求三个数的和defsum(a,b,c):returna+b+cx=int(input("请输入第一个数:"))y=int(input("请输入第二个数:&

  • classcastingexception_c++链接错误

    classcastingexception_c++链接错误转载自:http://www.blogjava.net/Sunday/archive/2007/08/18/137860.html现在java编程中经常碰到ClassCastException错误,ClassCastException是JVM在检测到两个类型间的转换不兼容时引发的运行时异常。此类错误通常会终止用户请求。本模式试图为您提供了解和排除ClassCastExcept

  • Delphi XE5 FireMonkey移动开发示例:粒子系统

    Delphi XE5 FireMonkey移动开发示例:粒子系统这个例子是参照Processing中的例子写的。  测试结果:在Windows7上,脱离开发环境的性能与Processing相当,在Android上表现良好。 源码如下:  unitExample.Particles;interfaceusesSystem.SysUtils,System.Types,System.UITypes,System.Classes,

  • int 和bigint差别有多大?

    int 和bigint差别有多大?

    2021年10月27日

发表回复

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

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