大家好,又见面了,我是你们的朋友全栈君。
在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长度。
如何通信:
发送方工作过程步骤:
- 创建DatagramSocket(可以设置本地端口,或由系统分配)
- 创建用于发送的DatagramPacket(主要设置发送的数据、远程地址和端口等信息)
- 通过DatagramSocket发送DatagramPacket(调用send方法)
- 关闭DatagramSocket
接收方工作过程步骤:
- 创建DatagramSocket(主要设置本地地址和端口等信息)
- 创建用于接受的DatagramPacket(不需要设置地址和端口)
- 通过DatagramSocket接收发送方信息,填充DatagramPacket(调用receive方法)
- 读取DatagramPacket的数据(调用getData方法)
- 关闭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 } }
接收方代码:
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账号...