Java 简单UDP通信

Java手册

java.net

Class DatagramSocket

  • All Implemented Interfaces:
    Closeable, AutoCloseable
    已知直接子类:
    MulticastSocket

    public class DatagramSocket
    extends Object
    implements Closeable

    这个类代表数据包发送和接收数据报套接字。

    数据报套接字发送或接收包送货服务。每个数据包的发送或接收数据报套接字单独处理和路由。发送多个数据包从一台机器到另一个可能是路由不同,并可能抵达任何顺序。

    在可能的情况下,新建DatagramSocket SO_BROADCAST套接字选项启用允许广播数据报的传输。为了接收广播数据包DatagramSocket应该绑定到通配符地址。在一些实现,也可能是接收广播数据包DatagramSocket时绑定到一个更具体的地址。

    例如:DatagramSocket s = new DatagramSocket(null); s.bind(new InetSocketAddress(8888)); 相当于:DatagramSocket s = new DatagramSocket(8888); 两种情况下将创建一个DatagramSocket能够接收广播在UDP端口8888。

  • 从以下版本开始:
  • JDK1.0
  • 另请参见:
  • DatagramPacket, DatagramChannel
  • 构造方法摘要

    构造方法
    Modifier Constructor and Description
      DatagramSocket()

    构造一个数据报套接字绑定到本地主机机器上的任何可用的端口。

    protected DatagramSocket(DatagramSocketImpl impl)

    创建数据报套接字与指定的DatagramSocketImpl不限。

      DatagramSocket(int port)

    构造一个数据报套接字绑定到本地主机上的指定端口。

      DatagramSocket(int port, InetAddress laddr)

    创建数据报套接字,绑定到指定的本地地址。

      DatagramSocket(SocketAddress bindaddr)

    创建数据报套接字,绑定到指定的本地套接字地址。

方法摘要

所有方法 静态方法 接口方法 具体的方法
Modifier and Type Method and Description
void bind(SocketAddress addr)

结合这DatagramSocket到一个特定的地址和端口。

void close()

关闭这个数据报套接字。

void connect(InetAddress address, int port)

将套接字连接到远程地址这个套接字。

void connect(SocketAddress addr)

这个套接字连接到一个远程的套接字地址(IP地址+端口号)。

void disconnect()

断开连接的套接字。

boolean getBroadcast()

如果SO_BROADCAST启用设置测试。

DatagramChannel getChannel()

返回唯一 DatagramChannel对象相关的数据报套接字,如果任何。

InetAddress getInetAddress()

返回此套接字连接的地址。

InetAddress getLocalAddress()

获取套接字绑定的本地地址。

int getLocalPort()

返回的端口号在这个套接字绑定的本地主机。

SocketAddress getLocalSocketAddress()

返回此套接字绑定端点的地址。

int getPort()

返回此套接字连接的端口号。

int getReceiveBufferSize()

得到这个 DatagramSocket SO_RCVBUF价值选择,所使用的缓冲区大小的平台在这 DatagramSocket输入。

SocketAddress getRemoteSocketAddress()

返回此套接字连接端点的地址,或 null如果它是无关的。

boolean getReuseAddress()

如果启用了SO_REUSEADDR测试。

int getSendBufferSize()

得到这个 DatagramSocket SO_SNDBUF价值选择,所使用的缓冲区大小的平台在这 DatagramSocket输出。

int getSoTimeout()

为SO_TIMEOUT检索设置。

int getTrafficClass()

得到交通类或类型的服务IP数据报的头从这个DatagramSocket发送的数据包。

boolean isBound()

返回套接字的绑定状态。

boolean isClosed()

返回是否关闭套接字。

boolean isConnected()

返回套接字的连接状态。

void receive(DatagramPacket p)

从这个套接字接收数据报包。

void send(DatagramPacket p)

从这个套接字发送一个数据报包。

void setBroadcast(boolean on)

启用/禁用SO_BROADCAST。设置

static void setDatagramSocketImplFactory(DatagramSocketImplFactory fac)

设置应用程序的数据报套接字实现工厂。

void setReceiveBufferSize(int size)

设置这个 DatagramSocket SO_RCVBUF选项来指定值。

void setReuseAddress(boolean on)

启用/禁用SO_REUSEADDR套接字选项。

void setSendBufferSize(int size)

设置这个 DatagramSocket SO_SNDBUF选项来指定值。

void setSoTimeout(int timeout)

启用/禁用SO_TIMEOUT与指定的超时时间,以毫秒为单位。

void setTrafficClass(int tc)

集交通类或类型的服务的IP数据报的头八隅体从这个DatagramSocket数据报。

Class DatagramPacket


  • public final class DatagramPacket
    extends Object

    这个类代表一个数据报包。

    数据报包是用来实现一个无连接包送货服务。每个消息路由从一台机器到另一个完全基于信息包含在包。发送多个数据包从一台机器到另一个可能是路由不同,并且可能抵达任何顺序。包交付是没有保证的。

    从以下版本开始:
    JDK1.0
  • 构造方法摘要

    构造方法
    Constructor and Description
    DatagramPacket(byte[] buf, int length)

    构造一个 DatagramPacket length接收数据包的长度。

    DatagramPacket(byte[] buf, int length, InetAddress address, int port)

    构造一个数据报包发送数据包的长度 length指定主机上的指定端口号。

    DatagramPacket(byte[] buf, int offset, int length)

    构造一个 DatagramPacket接收数据包的长度 length,指定一个抵消到缓冲。

    DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)

    构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。

    DatagramPacket(byte[] buf, int offset, int length, SocketAddress address)

    构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。

    DatagramPacket(byte[] buf, int length, SocketAddress address)

    构造一个数据报包发送数据包的长度 length指定主机上的指定端口号。

方法摘要

所有方法 接口方法 具体的方法
Modifier and Type Method and Description
InetAddress getAddress()

返回机器的IP地址的数据报发送或者接收的数据报。

byte[] getData()

返回数据缓冲区。

int getLength()

返回数据的长度发送或接收到的数据的长度。

int getOffset()

返回数据的偏移量被发送或接收到的数据的偏移量。

int getPort()

返回远程主机上的端口号,该数据报发送或接收的数据报。

SocketAddress getSocketAddress()

得到了SocketAddress(通常是IP地址+端口号)都的远程主机,这包被发送到或来自。

void setAddress(InetAddress iaddr)

集的机器的IP地址被发送的数据报。

void setData(byte[] buf)

这个包的数据缓冲区。

void setData(byte[] buf, int offset, int length)

这个包的数据缓冲区。

void setLength(int length)

这个包的长度。

void setPort(int iport)

设置端口号的远程主机发送数据报。

void setSocketAddress(SocketAddress address)

设置SocketAddress(通常是IP地址+端口号)都的远程主机发送数据报。

发送端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;

/**
 * UDP 发送端
 * @author Administrator
 *
 */
public class Demo2 {
    public static void main(String[] args) throws Exception {

        /**
         * 准备发送端
         * DatagramSocket()
         * 构造一个数据报套接字绑定到本地主机机器上的任何可用的端口。
         */
        DatagramSocket ds = new DatagramSocket();

        /**
         * 准备数据包
         *1、 DatagramPacket(byte[] buf, int length)
         * 构造一个 DatagramPacket length接收数据包的长度
         *2、 String的getBytes()
         * 方法是得到一个操作系统默认的编码格式的字节数组
         *3、 setSocketAddress()
         * 设置SocketAddress(通常是IP地址+端口号)都的远程主机发送数据报。
         * 4、InetSocketAddress(InetAddress addr, int port)
         * 创建一个套接字地址的IP地址和端口号。
         */
        String str = "你好,UDP";
        byte[] ch = str.getBytes();

        DatagramPacket dp = new DatagramPacket(ch, ch.length);
        dp.setSocketAddress(new InetSocketAddress("127.0.0.1", 12345));

        // 发送数据
        ds.send(dp);

        // 关闭套接字
        ds.close();

    }
}

接收端

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * UDP 接收端
 * @author Administrator
 *
 */
public class Demo3 {
    public static void main(String[] args) throws Exception {

        // 创建接收端
        DatagramSocket ds = new DatagramSocket(12345); 

        /**
         * 接收数据包
         * receive(DatagramPacket p)
         * 从这个套接字接收数据报包。
         */
        byte[] data = new byte[1024];
        DatagramPacket dp = new DatagramPacket(data, data.length);
        ds.receive(dp);

        // 获取接受到的信息
        String str = new String(data, 0, dp.getLength());
        System.out.println(str);

        // 关闭接收端
        ds.close();
    }
}

原文地址:https://www.cnblogs.com/chuijingjing/p/9544159.html

时间: 2024-10-03 22:19:36

Java 简单UDP通信的相关文章

Android 之简单UDP通信

一 Android UDP通信编程步骤 服务器端: 1.建立Socket 2.监听端口  3.接收数据  4.实现数据发送 客户端:直接实现数据发送即可 二 代码,实现一个简单的UdpHelper类 1 package com.br.delphi.centercontrol; 2 3 import android.os.Handler; 4 import android.os.Message; 5 import android.util.Log; 6 7 import java.io.IOExc

java实现UDP通信

1.概述 用DatagramSocket与DatagramPacket实现UDP通信.UDP比TCP相对来说简单一点,不需要等待连接,且处理数据不需要用输出输出流,只需要DatagramPacket.严格来说,UDP没有服务端和客户端之分,只有发送端与接收端之分. 2.发送端 发送端首先建立DatagramSocket与DatagramPacket,设置好DatagramPacket的端口与ip,再通过DatagramSocket发送. (1)创建DatagramSocket与DatagramP

java基础 UDP通信

无连接通信 UDP 客户端 package com.swift.test; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner; /*使用UDP通信编写一个Java程序.要求:获取键盘输入的内容.发送到服务端.服务端接收后.在控制台上打印接收到的内容 客戶端

[Java] Tcp/udp 简单通信

本文转自  我自己的博客guozeyiblog.cn 欢迎来访 效果图: //UDP通信 import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import java.net.*; import javax.swing.*; class send extends JFrame implements ActionL

JAVA网络编程--UDP通信

首先网络传输数据需了解例如以下三点 1.找到对方IP 2.数据要发送到对方指定的应用程序上,为了标识这些应用程序,所以给这些网络应用程序用数字进行了标识.为了方便称呼这个数字,叫做port,逻辑port 3.  定义通信规则.这个通信规则称为协议. 国际组织定义了通用协议TCP/IP. 127.0.0.1本机回环地址 不易记忆,可用主机名 主机名:localhost 0-65535port范围 0-1024系统使用或保留port .当中mysql的port号为 3306 一.UDP UDP相对于

java服务器与linux c客户端之间udp通信

java服务器和 linux c客户端采用udp协议互相通信,最关键的点是数据结构的统一.比如说,在c中一个char型 是8bit,在java中,char 是16bit,所以c和java的char类型不能直接互相转换.在本例程中,c的char 类型和 java的byte类型,两个数据类型都是8bit,这样就保证了数据正确传输的基本条件之一. java服务器代码如下: import java.io.*; import java.lang.*; import java.net.*; public c

[java]基于UDP的Socket通信Demo

java课编程作业:在老师给的demo的基础上实现客户端发送数据到服务器端,服务器端接受客户端后进行数据广播. 整体功能类似于聊天室,代码部分不是太难,但是在本机测试的时候出现这样的问题: 服务端通过将每一个Socket客户端的IP存入Set集合,每次接受到数据后都向当前所有的IP转发.但是本机演示的时候所有开的ChatClient客户端都是同一IP,怎么测试呢? 解决办法就是本机测试时候服务端向多个不同的端口转发就好了,这样跑起来的客户端是在不同端口上进行监听的(只是为了实现广播,实际应用下还

使用Java实现简单串口通信

最近一门课要求编写一个上位机串口通信工具,我基于Java编写了一个带有图形界面的简单串口通信工具,下面详述一下过程,供大家参考 ^_^ 一: 首先,你需要下载一个额外的支持Java串口通信操作的jar包,由于java.comm比较老了,而且不支持64位系统,这里推荐Rxtx这个jar包(32位/64位均支持). 官方下载地址:http://fizzed.com/oss/rxtx-for-java (注:可能需要FQ才能下载) 不能FQ的童鞋,可以在这里下载: http://files.cnblo

qt在windows下的udp通信(最简单)

qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发通信 界面: 源代码: LssHost.pro: [cpp] view plain copy #------------------------------------------------- # # Project created by QtCreator 2013-09-22T09:36:44