首页 >Java >java教程 >Java 数据报套接字

Java 数据报套接字

王林
王林原创
2024-08-30 16:16:30566浏览

Java DatagramSocket 类代表一种无连接的网络套接字,用于发送数据报包和接收数据报包;对于任何数据包的传递,数据报套接字是服务的发送和接收点,并且使用数据报套接字发送或接收的每个数据包都被单独寻址,然后路由到目的地,如果在两台机器之间传输多个数据包,数据包的路由可能不同,并且它们可以按任何顺序到达,并且在新构建的数据报套接字中启用了 SO_BROADCAST 选项,该套接字允许传输广播图。

广告 该类别中的热门课程 JAVA 掌握 - 专业化 | 78 课程系列 | 15 次模拟测试

开始您的免费软件开发课程

网络开发、编程语言、软件测试及其他

语法

java DatagramSocket 语法如下:

DatagramSocket variable_name = new DatagramSocket();

DatagramSocket 在 Java 中如何工作?

  • 数据报套接字是在客户端程序端和服务器程序端使用 DatagramSocket 类创建的,用于通信链接以及发送和接收数据包。
  • 在客户端程序端可以选择DatagramSocket()构造函数来创建数据报套接字,在服务器程序端可以选择DatagramSocket(int port)构造函数来创建数据报套接字。
  • 如果任何一个构造函数无法创建数据报套接字或数据报套接字无法绑定到端口,则会抛出 SocketException 对象。
  • 程序创建数据报套接字对象后,程序将分别调用 send(DatagramPacket dgp) 来发送数据报包,并调用 receive(DatagramPacket dgp) 来接收数据报包。

考虑下面的程序,使用 DatagramSocket 类发送和接收数据报包:

代码:

//Java program to send datagram packets using DatagramSocket class
import java.net.*;
public class Sender
{
public static void main(String[] args) throws Exception
{
DatagramSocket datasoc = new DatagramSocket();
String strn = "Welcome to DatagramSocket class";
InetAddress ipaddr = InetAddress.getByName("127.0.0.1");                
DatagramPacket dpac = new DatagramPacket(strn.getBytes(), strn.length(), ipaddr, 3000);
datasoc.send(dpac);
datasoc.close();
}
}
//Java program to receive datagram packets using DatagramSocket class
import java.net.*;
public class Receiver
{
public static void main(String[] args) throws Exception
{
DatagramSocket datasoc = new DatagramSocket(3000);
byte[] buff = new byte[1024];
DatagramPacket dpac = new DatagramPacket(buff, 1024);
datasoc.receive(dpac);
String strn = new String(dpac.getData(), 0, dpac.getLength());
System.out.println(strn);
datasoc.close();
}
}

输出:

Java 数据报套接字

说明: 在上面的程序中,创建了两组程序:使用 DatagramSocket 类发送数据包,一组使用 DatagramSocket 类接收数据包。在使用DatagramSocket类发送数据包的程序中,创建了DatagramSocket类的实例。然后将字符串赋给变量strn。然后将互联网 IP 地址分配给一个变量。然后,创建数据报包,并使用DatagramSocket类的send方法将数据包发送到目的IP地址。

在使用DatagramSocket类接收数据包的程序中,创建了一个DatagramSocket类的实例。然后创建字节类的实例。然后,创建数据报包,并使用DatagramSocket类的receive方法将数据包接收到源IP地址。

构造函数

DatagramSocket 类有多个构造函数。他们是:

  • DatagramSocket(): 数据报套接字是使用 DatagramSocket() 构造函数构造的,并且绑定到本地主机上的可用端口。
  • DatagramSocket(int): 使用 DatagramSocket() 构造函数构造数据报套接字,并将其绑定到本地主机上的指定端口。
  • DatagramSocket(int, InetAddress): 使用 DatagramSocket() 构造函数创建数据报套接字,并将其绑定到指定的本地互联网地址。

实现 Java DatagramSocket 的示例

下面是提到的示例:

示例

演示DatagramScoket类的各种方法的用法。

代码:

import java.io.IOException;
import java.net.DatagramSocket;
public class program
{
public static void main(String[] args) throws IOException
{
//Datagram Socket class Constructor is called
DatagramSocket sock = new DatagramSocket(1235);
// The method setSendBufferSize() method of datagram socket class is called
sock.setSendBufferSize(20);
// The method getSendBufferSize() method of datagram socket class is called
System.out.println("The buffer size sent is : " + sock.getSendBufferSize());
// The method setReceiveBufferSize() method of datagram socket class is called
sock.setReceiveBufferSize(20);
// The method getReceiveBufferSize() method of datagram socket class is called
System.out.println("The buffer size received is : " +
sock.getReceiveBufferSize());
// The method setReuseAddress() method of datagram socket class is called
sock.setReuseAddress(false);
// The method getReuseAddress() method of datagram socket class is called
System.out.println("The SetReuse address is set to : " +
sock.getReuseAddress());
// The method setBroadcast() method of datagram socket class is called
sock.setBroadcast(true);
// The method getBroadcast() method of datagram socket class is called
System.out.println("The setBroadcast is set to : " +
sock.getBroadcast());
// The method setTrafficClass() method of datagram socket class is called
sock.setTrafficClass(45);
// The method getTrafficClass() method of datagram socket class is called
System.out.println("The Traffic class is set to : " +
sock.getTrafficClass());
// The method getChannel() method of datagram socket class is called
System.out.println("The Channel is set to : " +
((sock.getChannel()!=null)?sock.getChannel():"null"));
// The method setSocketImplFactory() method of datagram socket class is called
sock.setDatagramSocketImplFactory(null);
// The method close() method of datagram socket class is called
sock.close();
// The method isClosed() method of datagram socket class is called
System.out.println("If the Socket Is Closed : " + sock.isClosed());
}
}

输出:

Java 数据报套接字

说明:在上面的程序中,定义了一个名为program的类。然后创建数据报套接字类的实例。调用数据报套接字类的setSendBufferSize()方法,该方法发送缓冲区大小。然后调用数据报套接字类的 getSendBufferSize() 方法,该方法接收缓冲区大小。

次に、データグラム ソケット クラスの setReceiveBufferSize() メソッドが呼び出され、さらにデータグラム ソケット クラスの getReceiveBufferSize() メソッドが呼び出され、バッファ サイズの送受信に使用されます。次に、データグラム ソケット クラスの setReuseAddress() メソッドが呼び出され、さらにデータグラム ソケット クラスの getReuseAddress() メソッドが呼び出され、再利用されたアドレスを送受信します。

次に、データグラム ソケット クラスのメソッド setBroadcast() メソッドが呼び出され、次にデータグラム ソケット クラスのメソッド getBroadcast() メソッドが呼び出され、ブロードキャストの設定と取得が行われます。次に、データグラム ソケット クラスのメソッド setTrafficClass() メソッドが呼び出され、次にデータグラム ソケット クラスのメソッド getTrafficClass() メソッドが呼び出されて、トラフィック クラスの設定と取得が行われます。

次に、データグラム ソケット クラスの getChannel() メソッドが呼び出され、true または false が返されます。次に、データグラム ソケット クラスのメソッド close() メソッドが呼び出され、ソケットが閉じられます。次に、データグラム ソケット クラスの isClosed() メソッドが呼び出されて、ソケットが閉じられているかどうかがチェックされ、ソケットが閉じられている場合は true が返され、そうでない場合は false が返されます。

結論

このチュートリアルでは、定義を通じて Java の DatagramSocket クラスの概念、Java の DatagramSocket クラスの構文、例とその出力を通じて Java の DatagramSocket クラスの動作を理解します。

以上是Java 数据报套接字的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
上一篇:Java Lambda Expressions下一篇:DataSet Java